SpringBoot使用jwt进行身份验证的方法示例

  

这里只供参考,比较使用jwt方式进行身份验证感觉不好,最不行的就是不能退出

  

登陆时设定多长过期时间,只能等这个时间过了以后才算退出,服务端只能验证请求过来的令牌是否通过验证

  

代码:      /* *   *由qhong>   @Target (ElementType.PARAMETER)   @Retention (RetentionPolicy.RUNTIME)   公共@ interface LoginUser {      }      之前      

JwtUtil:

        @ConfigurationProperties(前缀=癹wt”)   @ component   公开课JwtUtils {   私人日志记录器=LoggerFactory.getLogger (getClass ());      私人秘密字符串;   私人长到期;   私人字符串头;/* *   *生成jwt令牌   */公共字符串generateToken(长userId) {   日期nowDate=new日期();//过期时间   日期相匹配=new日期(nowDate.getTime() + * 1000年到期);      返回Jwts.builder ()   .setHeaderParam (typ”、“JWT”)   .setSubject (userId + " ")   .setIssuedAt (nowDate)   .setExpiration(相)   .signWith (io.jsonwebtoken.SignatureAlgorithm。HS512秘密)   .compact ();   }      公开声称getClaimByToken(字符串标记){   尝试{   返回Jwts.parser ()   .setSigningKey(秘密)   .parseClaimsJws(令牌)   .getBody ();   }捕捉(异常e) {   logger.debug(“验证令牌错误”,e);   返回null;   }   }/* *   *标记是否过期   * @return真的:过期   */公共布尔isTokenExpired(过期日期){   返回过期。(新日期之前());   }      公共字符串getSecret () {   返回的秘密;   }      公共空间setSecret(字符串秘密){   这一点。秘密=秘密;   }      公共长getExpire () {   返回到期;   }      公共空间setExpire(长到期){   这一点。到期=到期;   }      公共字符串getHeader () {   返回头;   }      公共空间setHeader(字符串头){   这一点。头=头;   }   }      之前      

application.properties配置:

        #加密秘钥   jwt.secret=f4e2e52034348f86b67cde581c0f9eb5   #令牌有效时长,单位秒   jwt.expire=60000   jwt.header=标记      

拦截器:

     /* *   *由qhong>   @ component   公共类LoginUserHandlerMethodArgumentResolver实现HandlerMethodArgumentResolver {   @ autowired   私人UserService UserService;      @Override   公共布尔supportsParameter (MethodParameter参数){   返回parameter.getParameterType () .isAssignableFrom (User.class),,parameter.hasParameterAnnotation (LoginUser.class);   }      @Override   公共对象resolveArgument (MethodParameter参数,ModelAndViewContainer容器,   NativeWebRequest请求,WebDataBinderFactory工厂){抛出异常//获取用户ID   对象对象=request.getAttribute (AuthorizationInterceptor。USER_KEY RequestAttributes.SCOPE_REQUEST);   如果(对象==null) {   返回null;   }//获取用户信息   用户用户=userService.selectById((长)对象);      返回用户;   }   }      

WebConfig:

        @ configuration   公开课WebConfig延伸WebMvcConfigurerAdapter {      @ autowired   私人AuthorizationInterceptor AuthorizationInterceptor;   @ autowired   私人LoginUserHandlerMethodArgumentResolver LoginUserHandlerMethodArgumentResolver;      @Override   公共空间addInterceptors (InterceptorRegistry注册表){   registry.addInterceptor (authorizationInterceptor) .addPathPatterns (“/* *”);   }      @Override   公共空间addArgumentResolvers (ListargumentResolvers) {   argumentResolvers.add (loginUserHandlerMethodArgumentResolver);   }   }      登录:

        @PostMapping("/登录”)   @AuthIgnore   公共R login2 (@RequestBody用户u) {//用户登录   长userId=userService.addUser (u);//生成令牌   字符串标记=jwtUtils.generateToken (userId);      Object> Map<字符串;地图=new HashMap<在();   地图。把(“令牌”,令牌);   地图。put(“过期”,jwtUtils.getExpire ());      返回R.ok(地图);   }      

LoginUser注解使用:

        @RequestMapping (value=" https://www.yisu.com/query2 ",方法=RequestMethod.POST)   公共用户Query2 (@LoginUser用户u) {   回报你;   }      

SpringBoot使用jwt进行身份验证的方法示例