首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Grails -使用Spring Security插件通过UI登录时如何使用JWT

Grails是一种基于Groovy语言的开源Web应用框架,它建立在Spring Boot和Spring MVC之上,提供了简单、高效的开发方式。Grails框架的核心理念是约定优于配置,通过提供一系列的默认配置和约定,使开发者能够快速构建Web应用。

在Grails中使用Spring Security插件实现用户认证和授权功能是非常常见的需求。JWT(JSON Web Token)是一种用于身份验证和授权的开放标准,它通过在用户登录成功后生成一个包含用户信息和权限的Token,并将Token发送给客户端,客户端在后续的请求中携带该Token进行身份验证。

要在Grails中使用JWT实现通过UI登录,可以按照以下步骤进行:

  1. 添加Spring Security插件依赖:在Grails的build.gradle文件中添加Spring Security插件的依赖,例如:
代码语言:txt
复制
compile 'org.grails.plugins:spring-security-core:4.0.3'
compile 'org.grails.plugins:spring-security-rest:3.0.1'
compile 'org.grails.plugins:spring-security-jwt:3.0.1'
  1. 配置Spring Security插件:在Grails的application.yml文件中配置Spring Security插件,包括JWT的相关配置,例如:
代码语言:txt
复制
grails:
  plugin:
    springsecurity:
      jwt:
        secret: 'your-secret-key'
        expiration: 86400
        tokenPrefix: 'Bearer '
        headerName: 'Authorization'

其中,secret是用于签名JWT的密钥,expiration是Token的过期时间(单位为秒),tokenPrefix是Token的前缀,headerName是Token在HTTP请求头中的字段名。

  1. 创建登录接口:在Grails的控制器中创建一个用于处理用户登录的接口,接收用户名和密码,并使用Spring Security插件进行认证,例如:
代码语言:txt
复制
import grails.plugin.springsecurity.annotation.Secured

class AuthController {
    @Secured('permitAll')
    def login() {
        def authenticationToken = new UsernamePasswordAuthenticationToken(params.username, params.password)
        def authentication = springSecurityService.authenticate(authenticationToken)
        if (authentication) {
            def token = jwtTokenGenerator.generateToken(authentication)
            render([token: token] as JSON)
        } else {
            render(status: 401, text: 'Authentication failed')
        }
    }
}

在上述代码中,jwtTokenGenerator是一个用于生成JWT Token的服务。

  1. 创建JWT Token生成服务:创建一个服务类,用于生成JWT Token,例如:
代码语言:txt
复制
import io.jsonwebtoken.Jwts
import io.jsonwebtoken.SignatureAlgorithm

class JwtTokenGeneratorService {
    def secret
    def expiration

    String generateToken(Authentication authentication) {
        def authorities = authentication.authorities.collect { it.authority }
        def now = new Date()
        def expirationDate = new Date(now.time + expiration * 1000)

        Jwts.builder()
                .setSubject(authentication.name)
                .claim('authorities', authorities)
                .setIssuedAt(now)
                .setExpiration(expirationDate)
                .signWith(SignatureAlgorithm.HS512, secret)
                .compact()
    }
}

在上述代码中,secretexpiration分别是配置文件中的密钥和过期时间。

  1. 创建JWT Token验证过滤器:创建一个过滤器,用于验证请求中携带的JWT Token,并将用户信息存储到Spring Security的上下文中,例如:
代码语言:txt
复制
import grails.plugin.springsecurity.rest.authentication.JwtAuthenticationToken

class JwtTokenFilter extends OncePerRequestFilter {
    def jwtTokenParser

    @Override
    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
        def token = extractToken(request)
        if (token) {
            def authentication = jwtTokenParser.parseToken(token)
            if (authentication) {
                SecurityContextHolder.getContext().authentication = authentication
            }
        }
        filterChain.doFilter(request, response)
    }

    String extractToken(HttpServletRequest request) {
        def header = request.getHeader('Authorization')
        if (header?.startsWith('Bearer ')) {
            return header.substring(7)
        }
        null
    }
}

在上述代码中,jwtTokenParser是一个用于解析JWT Token的服务。

  1. 配置JWT Token验证过滤器:在Grails的resources.groovy文件中配置JWT Token验证过滤器,例如:
代码语言:txt
复制
import com.example.JwtTokenFilter

beans = {
    jwtTokenFilter(JwtTokenFilter) {
        jwtTokenParser = ref('jwtTokenParser')
    }
}
  1. 配置Spring Security:在Grails的application.groovy文件中配置Spring Security,包括允许匿名访问的URL和启用JWT Token验证过滤器,例如:
代码语言:txt
复制
grails.plugin.springsecurity.controllerAnnotations.staticRules = [
    '/auth/login': ['permitAll']
]

grails.plugin.springsecurity.filterChain.chainMap = [
    '/auth/login': 'JOINED_FILTERS,-jwtTokenFilter',
    '/**': 'JOINED_FILTERS,jwtTokenFilter'
]

在上述代码中,/auth/login是用于登录的接口,允许匿名访问。

通过以上步骤,我们可以在Grails中使用Spring Security插件通过UI登录时使用JWT进行身份验证。JWT具有无状态、可扩展、安全性高等优势,适用于各种Web应用场景。

腾讯云提供了多种与云计算相关的产品和服务,例如云服务器、云数据库、云存储等。具体推荐的腾讯云产品和产品介绍链接地址可以根据实际需求和情况进行选择。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Github标星25K+Star,SpringBoot实战电商项目mall出SpringCloud版本啦!

Cloud 微服务框架 Spring Boot 容器+MVC框架 Spring Security 认证和授权框架 MyBatis ORM框架 MyBatisGenerator 数据层代码生成 PageHelper...MyBatis物理分页插件 Swagger-UI 文档生产工具 Elasticsearch 搜索引擎 RabbitMq 消息队列 Redis 分布式缓存 MongoDb NoSql数据库 Docker...应用容器引擎 Druid 数据库连接池 OSS 对象存储 JWT JWT登录支持 LogStash 日志收集 Lombok 简化对象封装工具 Seata 全局事务管理框架 前端技术 技术 说明 Vue...扩展解决方案 如果想使用Consul作为注册及配置中心的话请参考:Spring Cloud Consul:服务治理与配置中心 如果想使用Nacos作为注册及配置中心的话请参考:Spring Cloud...Alibaba:Nacos 作为注册中心和配置中心使用 分布式事务解决方案请参考:使用Seata彻底解决Spring Cloud中的分布式事务问题!

1K30

Grails——赋能敏捷开发的利器

使用Grails,你可以从第一分钟就开始编写业务逻辑,无需考虑环境问题,避免重复造轮子,帮助你更快地开始。...通过Grails,你可以非常敏捷地进行开发: 更快地开始,无需费心环境搭建,自带测试环境(嵌入h2内存数据库和Tomcat,这点后来的Spring Boot应该是学它的); 只消几分钟便可得到Domain...,有些比较复杂的功能,比如用户验证和授权,通过它的Security框架,只消几行代码便可实现。...近年流行的Spring Boot和Grails的比较是,Spring Boot只包含Controller和API,没有UI,适合做微服务应用,Grails适合包含前端到后端的全栈单体应用。...我相信Spring Boot吸收了不少Grails的思想,实现了开箱即用,而现在新版Grails反过来把Spring Boot作为底层框架之一进行了重构。

1.8K50

Spring Boot REST API中使用Json Web Token

我们将使用一些 Spring 引导功能来实现 Spring 安全,并使用 JSON WebTokens 进行授权。 这种情况下的用户流是 用户登录 我们验证用户凭据 令牌被发送回用户代理。...用户在访问受保护资源发送 JWT。我们验证 JWT。 如果 JWT 有效,我们允许用户访问该资源。 JSON WebTokens,称为 JWT,用于为用户形成授权。...用户将尝试访问/cachedemo/v1/companies/并且由于 API 受到保护,他将得到如下响应: 现在我们将实现如何保护这个 API 以及在它被保护如何访问它。...Password因为我们正在使用,所以用户将以加密格式保存BCryptPasswordEncoder。我们将展示用户如何登录以创建令牌。...现在在我们的 GET 请求中使用此令牌来检索公司数据。此 GET 请求如下所示: 通过这种方式,我们展示了如何使用 JSON 网络令牌保护 REST API。

17420

学成在线-第16天-讲义- Spring Security Oauth2 JWT RSA加解密

学成在线-第16天-讲义- Spring Security Oauth2 JWT 1 用户认证需求分析 1.1 用户认证与授权 ​ 截至目前,项目已经完成了在线学习功能,用户通过在线学习页面点播视频进行学习...3 Spring Security Oauth2研究 3.1 目标 ​ 本项目认证服务基于Spring Security Oauth2进行构建,并在其基础上作了一些扩展,采用JWT令牌机制,并自定义了用户身份信息的内容...本教程的主要目标是学习在项目中集成Spring Security Oauth2的方法和流程,通过spring Security Oauth2的研究需要达到以下目标: 1、理解Oauth2的授权码认证流程及密码认证的流程...3.6.3 JWT入门 Spring Security 提供对JWT的支持,本节我们使用Spring Security 提供的JwtHelper来创建JWT令牌,校验JWT令牌等操作。...Security的代码,我们在Service方法中通过RestTemplate请求Spring Security所暴露的申请令牌接口来申请令牌,下边是测试代码: @SpringBootTest @RunWith

11.8K10

微服务 day17:基于Zuul网关实现路由转发、过滤器

本章节为【学成在线】项目的 day17 的内容  构建用户中心服务,并基于 Spring Security Oauth2 以及 jwt 令牌实现用户认证的完整流程。  ...2、认证服务认证通过向浏览器 cookie 写入 token (身份令牌) 认证服务请求用户中心查询用户信息。 认证服务请求 Spring Security 申请令牌。...3**、前端携带token请求认证服务获取**jwt令牌 前端获取到 jwt 令牌并存储在 sessionStorage。 前端从jwt令牌中解析中用户信息并显示在页面。 前端如何解析?...中将正确的密码返回, spring security 会自动去比对输入密码的正确性。...这样非常不安全,Spring Security推荐使用 BCryptPasswordEncoder对密码加随机盐,每次的Hash值都不一样,安全性高 。

3.6K20

Spring Security+JWT+Vue 手撸一个前后端分离无状态认证 Demo

后端 主要展示 Spring SecurityJWT 结合使用构建后端 API 接口。...主要功能包括登陆(如何Spring Security 中添加验证码登陆),查找,创建,删除并对用户权限进行区分等等。...User 对象,其中包含了 记住我,验证码等登陆信息,因为 Spring Security 整合 Jwt 本质上就是用自己自定义的登陆过滤器,去替换 Spring Security 原生的登陆过滤器,...JWT 过滤器配置 众所周知,Spring Security 是借助一系列的 Servlet Filter 来来实现提供各种安全功能的,所以我们要使用 JWT 就需要自己实现两个和 JWT 有关的过滤器...Ui 为 ElementUI 为了获取 XSRF-TOKEN,还需要 VueCookies 最后为了在项目的首页展示介绍,我还引入了 mavonEditor,一个基于 vue 的 Markdown 插件

5.1K20

微服务 day16:基于Spring Security Oauth2开发认证服务

本章节的最后通过 Spring Security Oauth2 完成了认证服务的基本实现,但授权还没做。...一、用户需求分析 0x01 用户认证与授权 截至目前,项目已经完成了在线学习功能,用户通过在线学习页面点播视频进行学习。 如何去记录学生的学习过程呢?...本教程的主要目标是学习在项目中集成Spring Security Oauth2 的方法和流程,通过 Spring Security Oauth2 的研究需要达到以下目标: 1、理解 Oauth2 的授权码认证流程及密码认证的流程...以 oauth_ 开头的表都是 Spring Security 自带的表。 本项目中 Spring Security 主要使用 oauth_client_details 表: ?...JWT入门 Spring Security 提供对 JWT 的支持,本节我们使用 Spring Security 提供的 JwtHelper 来创建JWT令牌,校验JWT令牌等操作。

4K30

Mall电商实战项目专属学习路线,主流技术一网打尽!

仅需四步,整合SpringSecurity+JWT实现登录认证 ! 前后端分离项目,如何优雅实现文件存储! 手把手教你搞定权限管理,结合Spring Security实现接口的动态权限控制!...mall-admin-web采用Vue+Element-UI实现,《mall学习教程》中并没有专门的前端教程,学习前端的话这里有个学习方法,具体参考如何在5天内学会Vue?聊聊我的学习方法!。...:新一代API网关服务 Spring Cloud Security:Oauth2使用入门 Spring Cloud Security:Oauth2结合JWT使用 Spring Cloud Security...:Oauth2实现单点登录 Spring Cloud Alibaba:Nacos 作为注册中心和配置中心使用 Spring Cloud Alibaba:Sentinel实现熔断与限流 使用Seata彻底解决...: API文档生成工具Knife4j的使用 API文档生成工具YApi的使用 Docker相关实用技术: 如何安全访问Docker服务 fabric8io出品的Docker Maven插件使用 SpringBoot

2.3K41

微服务 day18:基于oauth2实现RBAC认证授权、微服务间认证实现

Security进行处理 return userDetails; } 重启认证服务工程,使用 postman 完成登录,获取到用户令牌 ?...哪些功能需要前端请求携带 JWT ? 用户登录成功请求资源服务都需要携带 jwt 令牌,因为资源服务已经实现了 jwt 认证,如果校验头部没有 jwt 则会认为身份不合法。...,由 ucenter-auth 服务向 ucenter 服务调用该接口,获取用户的信息,然后将得到的这些信息 打包为 UserJwt 对象交由 Spring Security 进行校验,校验通过后会将该...JWT令牌到认证服务中,校验 Spring Security 返回的 JWT令牌完整性后写入到 redis。...公钥:用于校验JWT令牌是否完整,以及解密JWT令牌中的用户信息 私钥:生成加密后的JWT令牌 八、待完善的一些功能  为 swagger-ui 配置认证授权,使接口文档暴露在外部需要进行登录认证,提高安全性

3.1K11

用 Swagger 测试接口,怎么在请求头中携带 Token?

使用JWT,access_token 实际上就不用存储了(无状态登录,服务端不需要保存信息),因为用户的所有信息都在 jwt 里边,所以这里配置的 JwtTokenStore 本质上并不是做存储。...我们创建一个新的 Spring Boot 项目,叫做 user-server ,作为我们的资源服务器,创建,添加如下依赖: ?...最后配置一下资源的拦截规则,这就是 Spring Security 中的基本写法,我就不再赘述。...配置完成后,我们还需要给 swagger-ui 放行,否则 swagger-ui 相关的静态资源会被 Spring Security 拦截下来: @Configuration public class...4.小结 好了,今天就和小伙伴们介绍了在 Swagger 请求中,如何修改请求头的问题,感兴趣的小伙伴可以下来试试哦~ 本文案例下载地址:https://github.com/lenve/spring-security-samples

2.4K30

SpringBoot 应用整合JWT详解

当你在pom文件中集成了spring-boot-maven-plugin插件后你可以使用Maven相关的命令来run你的应用。...使用JWT保护你的Spring Boot应用 终于我们开始介绍正题,这里我们会对/users进行访问控制,先通过申请一个JWT(JSON Web Token读jot),然后通过这个访问/users,才能拿到数据...关于JWT,出门奔向以下内容,这些不在本文讨论范围内: https://tools.ietf.org/html/rfc7519 https://jwt.io/ JWT很大程度上还是个新技术,通过使用HMAC...方法 访问Controller 这样本文的主要流程就结束了,本文主要介绍了,如何Spring Security结合JWT保护你的Spring Boot应用。...如何使用Role和Authority,这里多说一句其实在Spring Security中,对于GrantedAuthority接口实现类来说是不区分是Role还是Authority,二者区别就是如果是hasAuthority

1.8K10

一个全栈SpringBoot项目-Book Social Network

该应用程序使用 JWT 令牌确保安全性,并遵循 REST API 设计的最佳实践。...后端是使用 Spring Boot 3 和 Spring Security 6 构建的,而前端是使用 Angular 和 Bootstrap 进行样式开发的。...电子邮件验证:使用安全电子邮件验证码激活帐户。 用户身份验证:现有用户可以安全地登录其帐户。 图书管理:用户可以创建、更新、共享和归档他们的图书。 图书借阅:实施必要的检查以确定图书是否可以借阅。...1、后端(book-network) Spring Boot 3 Spring Security 6 JWT Token Authentication Spring Data JPA JSR-303...,学生将学习: 根据业务需求设计类图 实施单一回购方法 使用 JWT 令牌和 Spring Security 保护应用程序 通过电子邮件注册用户并验证帐户 通过 Spring Data JPA 使用继承

2400

这套Spring Cloud Gateway+Oauth2终极权限解决方案升级了!

,负责对登录用户进行认证,整合Spring Security+Oauth2; micro-oauth2-api:API服务,受网关服务的保护,用户鉴权通过后可以访问该服务,不整合Spring Security...,后来又改成了年份,现在又添加了之前废弃的地铁站名字作为别名,真是让人迷惑; SpringBoot 2.7.0版本中使用Maven插件需要添加版本号; org.springframework.boot...hello 带JWT令牌访问受保护的API接口,注意请求头Authorization添加Bearer前缀,可以正常访问; 使用获取到的JWT令牌访问获取当前登录用户信息的接口,访问地址:http:/.../localhost:9201/api/user/currentUser 当JWT令牌过期使用接口返回的refreshToken获取新的JWT令牌,访问地址:http://localhost:9201.../auth/oauth/token 使用没有访问权限的andy:123456账号登录,访问接口时会返回如下信息,访问地址:http://localhost:9201/api/hello 总结 在微服务系统中实现权限功能

1K20

【程序源代码】Spring Coud微服务管理后台脚手架

关键字:管理后台脚手架:Spring Coud微服务 本项目基于Spring Cloud 和Ant Design Pro实现前后端管理平台一站式脚手架,便于快速开发企业级应用。...Spring Security基于Oauth2认证并生成JWT Token,并自定义SSO统一登录页面,实现标准认证协议,保证登陆安全 基于Ant Design Pro实现admin-ui, 前后端分离...,使用Spring Security SSO登录页面登录,并基于JWT Token实现权限控制。...实现了阿里云云效的release文件,建议通过阿里云云效实现持续集成持续交付部署,目前我们的环境云效会自动监听git代码提交,当发生代码提交,自动编译并部署到测试的k8s容器集群环境 Demo服务中实现多数据源配置...,redis配置,并通过注解实现基于JWT Token中角色控制API访问权限 增加Swagger配置,实现自动生成api文档 Config服务实现测试环境和生产环境配置文件隔离 Registry服务支持多实例高可以用部署

55870

Spring Security 和 Apache Shiro 登录安全架构选型

Spring Security和Apache Shiro都是非常常用的登录安全框架,两者在登录安全架构的选型上各有特点: Spring Security特点: 与Spring框架深度集成,学习曲线低 功能强大...生态 如果需要简单快速的登录认证,Shiro集成更快 如果需要灵活复杂的权限控制,Spring Security更优 两者都可以满足常见登录安全需求,可根据团队偏好选择 在选择使用哪个框架,需要考虑以下因素...但是,如果您已经熟悉Spring生态系统和Spring Boot,那么使用Spring Security可能更加方便。...集成性:如果您正在使用Spring框架,则可以更容易地集成Spring Security。但是,如果您正在使用其他框架或技术,则可能更容易使用Apache Shiro。...如何选型 在选择登录流程模式,应该综合考虑以下因素: 安全性:JWT模式相对于Session模式来说,更具有安全性,因为JWT可以通过签名和加密来保护数据的完整性和机密性。

15640
领券