JWT + interceptor simple login authentication

1. Increase reliance JWT

       <dependency>
            <groupId>com.auth0</groupId>
            <artifactId>java-jwt</artifactId>
            <version>3.8.1</version>
        </dependency>

 2.JWT Tools

public  class TokenUtil {
     // token key 
    Private  static  Final String TOKEN_SECRET = "27f56a1ca0a347618ff39c7fdf9ab684" ;
     // 15-minute timeout period 
    Private  static  Final  Long Out_time * 60 * 150 = 1000 ; 

    Private  static Logger LoggerFactory.getLogger = log (. TokenUtil class ) ; 


    / * encrypted 
     * @param the userId 
     * @return 
     * / 
    public  static String Sign (String the userId) {
         the try { 
            a Date EXPIRATION_TIME= new Date(System.currentTimeMillis() + OUT_TIME);
            Algorithm algorithm = Algorithm.HMAC256(TOKEN_SECRET);
            Map<String, Object> headerMap = new HashMap<>(2);
            headerMap.put("type", "JWT");
            headerMap.put("alg", "HS256");
            return JWT.create().withHeader(headerMap).withClaim("userId", userId).withExpiresAt(expiration_time).sign(algorithm);
        } catch (Exception e) {
            log.error(e.getMessage());
            return null;
        }
    }


    /** 解密
     * @param token
     * @return
     */
    public static Map<String, Claim> verifyToken(String token) {
        DecodedJWT decodedJWT=null;
        try {
            JWTVerifier verifier = JWT.require(Algorithm.HMAC256(TOKEN_SECRET)).build();
            decodedJWT = verifier.verify(token);
            log.info("超时时间:"+decodedJWT.getExpiresAt());
            log.info("载体信息:"+decodedJWT.getClaim("userId") .asString ());
            log.info ( "algorithm:" + decodedJWT.getAlgorithm ()); 
        } the catch (Exception E) {
           // decode exception is thrown 
            log.error (e.getMessage ());
             return  null ; 
        } 
        return decodedJWT.getClaims (); 
    } 
}

3. interceptor intercepts the request, and springboot injection interceptors

@Component
public class TokenInterceptor implements HandlerInterceptor {
   private   Logger logger = LoggerFactory.getLogger(TokenInterceptor.class);

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        String token = request.getHeader("token");
        //token验证
        if (!StringEmpty.IsEmpty(token)) {
            Map<String, Claim> claimMap = TokenUtil.verifyToken(token);
            if (claimMap!=null ) {
                 // account operation ... 
                return  to true ; 
            } the else {
                 // validation errors, jump to the error page 
                Response.sendRedirect (request.getContextPath () + "/ twjd / error" );
                return  to false ; 
            } 
        } 
        return  to false ; 
    } 
}

 

@Configuration
public class InterceptorConfig  implements WebMvcConfigurer {
    @Autowired
    private TokenInterceptor tokenInterceptor;


    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        InterceptorRegistration registration = registry.addInterceptor(tokenInterceptor);
        //拦截配置
        registration.addPathPatterns("/twjd/**");
        //排除配置
        registration.excludePathPatterns("/twjd/login","/twjd/error");
    }
}

4. User login operation, verify that the user carries token, if the authentication token to carry

    /**
     * 用户登陆
     *
     * @param sysusers
     * @param request
     * @param response
     * @return
     */
    @RequestMapping(value = "/login", method = RequestMethod.POST)
    @ResponseBody
    public HashMap<String, String> login(Sysuser sysusers, HttpServletRequest request, HttpServletResponse response) {
        Sysuser user = logService.getUser(sysusers.getName());
        HashMap<String, String> tokenMap = new HashMap<>(1);
        //User and stored in the issued password is correct token 
        IF ( null ! = User && user.getPassword (). The equals (sysusers.getPassword ())) {
             IF (! StringEmpty.IsEmpty (user.getPassword ())) { 
                response.setHeader ( "token" , TokenUtil.sign (user.getID ())); 
                tokenMap.put ( "token" , TokenUtil.sign (user.getID ()));
                 // stored in redis set the expiration time of one day 
                IF ( ! redisUtil.exists (sysusers.getName ())) { 
                    logger.info ( "active users + 1'd:" + sysusers.getName ()); 
                    redisUtil.set (sysusers.getName (), the sysusers, . 1 , TimeUnit.DAYS) ;
                } 
                Return tokenMap; 
            } 
        } the else { 
            tokenMap.put ( "token", "user absent" ); 
        } 
        return tokenMap; 
    }

 

Guess you like

Origin www.cnblogs.com/yq-cc/p/11320324.html