Spring Security+JWT实现用户验证与授权

Spring Security+JWT实现用户验证与授权

场景分析

在我们项目中涉及不同“角色”,包括游客,普通用户和管理员。游客不需要经过任何验证,可以使用部分功能,如查看系统提供的地图钉。另外两种角色则必须使用正确的账号密码登录,且普通用户不能访问部分管理员才能访问的请求。

针对这样的需求,后端需要对三种角色(以及未来可能新增的其他角色)进行分类处理。游客与其他角色的区别在于是否需要登录,因此可以借助网站通用手段“token”加以鉴别:用户若登录则获得一个唯一标识的token,并在之后请求中都携带该token用于验证。而针对普通用户和管理员用户,则需要根据token解析出其身份,用于后续判断。在SpringBoot开发生态中,JWT为我们提供了方便的token生成与验证工具包,而Spring Security则集成了完整的认证/授权流程,用于解析出当前请求的“身份”,并与Controller中对应请求所需的“身份”加以比较,满足才允许访问请求。

token生成与验证

使用JWT工具包可以方便地根据用户的字段生成token。具体步骤如下:

  1. 引入依赖
<dependency>
	<groupId>com.auth0</groupId>
	<artifactId>java-jwt</artifactId>
	<version>3.19.4</version>
</dependency>
  1. 创建JWT工具类便于使用

工具类主要需要封装生成token和验证token的方法。JWT生成token时可以自己加入某些字段,如id,用户名等,用于唯一标识用户,且这些字段在解析token时可以被重新抽离出来。同样,为了生成的token不被其他人解析出关键信息,生成与验证时需要指定自己的密钥和token过期时间。

@Component
public class JwtUtil {
   
    /**
     * 密钥
     */
    private static String SECRET;

    /**
     * 过期时间
     */
    private static long EXPIRATION;//单位为秒

    /**
     * 生成用户token,设置token超时时间
     */
    public static String createToken(User user) {
   
        //过期时间
        Date expireDate = new Date(System.currentTimeMillis() + EXPIRATION * 1000);
        Map<String, Object> map = new HashMap<>();
        map.put("alg", "HS256");
        map.put("typ", "JWT");
        String token = JWT.create()
                .withHeader(map)// 添加头部
                //可以将基本信息放到claims中
                .withClaim("id", user.getId())              //userId
                .withClaim("userName", user.getName())      //userName
                .withClaim(
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值