• JWT实现加密登录


    目录

    废话不多说,上代码

    引入依赖

    在config中创建包JWTConfig :

    在config中创建JWTInter

    在Config中创建InterConfig监听

     Controller层

    Srvice层

    ServiceImpl层

    Mapper层

    Mapper.xml层


    废话不多说,上代码

    引入依赖

    1. com.auth0
    2. java-jwt
    3. 3.4.0

    在config中创建包JWTConfig :

    1. package com.buba.config;
    2. import com.auth0.jwt.JWT;
    3. import com.auth0.jwt.JWTCreator;
    4. import com.auth0.jwt.algorithms.Algorithm;
    5. import com.auth0.jwt.interfaces.DecodedJWT;
    6. import java.util.Calendar;
    7. import java.util.Date;
    8. import java.util.Map;
    9. public class JWTConfig {
    10. private static final String SIGN = "123456"; // 秘钥
    11. /**
    12. * 生成token
    13. * @param map
    14. * @return
    15. */
    16. public static String getToken (Map map){
    17. Calendar instance = Calendar.getInstance();
    18. instance.add(Calendar.DATE,7); // 默认7天过期
    19. // 创建jwt builder
    20. JWTCreator.Builder builder = JWT.create();
    21. map.forEach((k,v)->{
    22. builder.withClaim(k,v);
    23. });
    24. String token = builder.withExpiresAt(instance.getTime())
    25. .sign(Algorithm.HMAC256(SIGN));
    26. return token;
    27. }
    28. /**
    29. * 验证token合法性
    30. * @param token
    31. */
    32. public static void verify(String token){
    33. JWT.require(Algorithm.HMAC256(SIGN)).build().verify(token);
    34. }
    35. /**
    36. * 获取token中的payload
    37. * @param token
    38. * @return
    39. */
    40. public static DecodedJWT getTokenInfo(String token){
    41. DecodedJWT verify = JWT.require(Algorithm.HMAC256(SIGN)).build().verify(token);
    42. return verify;
    43. }
    44. /**
    45. * 判断 token 是否过期
    46. */
    47. public boolean isTokenExpired(Date expiration){
    48. return expiration.before(new Date());
    49. }
    50. }

    在config中创建JWTInter

    1. package com.buba.config;
    2. import com.auth0.jwt.exceptions.AlgorithmMismatchException;
    3. import com.auth0.jwt.exceptions.SignatureVerificationException;
    4. import com.auth0.jwt.exceptions.TokenExpiredException;
    5. import com.fasterxml.jackson.databind.ObjectMapper;
    6. import org.springframework.web.servlet.HandlerInterceptor;
    7. import javax.servlet.http.HttpServletRequest;
    8. import javax.servlet.http.HttpServletResponse;
    9. import java.util.HashMap;
    10. public class JWTInter implements HandlerInterceptor {
    11. @Override
    12. public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
    13. String token = request.getHeader("token");
    14. HashMap map = new HashMap<>();
    15. try {
    16. JWTConfig.verify(token);
    17. return true;
    18. } catch (TokenExpiredException e) {
    19. map.put("state", false);
    20. map.put("msg", "Token已过期");
    21. } catch (SignatureVerificationException e){
    22. map.put("state", false);
    23. map.put("msg", "签名错误");
    24. } catch (AlgorithmMismatchException e){
    25. map.put("state", false);
    26. map.put("msg", "加密不匹配");
    27. } catch (Exception e) {
    28. e.printStackTrace();
    29. map.put("state", false);
    30. map.put("msg", "无效");
    31. }
    32. String json = new ObjectMapper().writeValueAsString(map);
    33. response.setContentType("application/json;charset=UTF-8");
    34. response.getWriter().println(json);
    35. return false;
    36. }
    37. }

    在Config中创建InterConfig监听

    1. package com.buba.config;
    2. import org.springframework.context.annotation.Configuration;
    3. import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
    4. import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
    5. @Configuration
    6. public class InterConfig implements WebMvcConfigurer {
    7. @Override
    8. public void addInterceptors(InterceptorRegistry registry) {
    9. registry.addInterceptor(new JWTInterceptor()).
    10. excludePathPatterns("/User/UserId","/User/InsetUser") // 放行
    11. .addPathPatterns("/**"); // 拦截除了"/user/**的所有请求路径
    12. }
    13. }

     Controller层

    1. @GetMapping("/UserId")
    2. public Map selUser(@RequestBody User user) {
    3. Map result = new HashMap<>();
    4. try {
    5. User userDB = userService.selUser(user);
    6. Map map = new HashMap<>();//用来存放payload
    7. map.put("id",userDB.getU_id().toString());
    8. map.put("username", userDB.getU_name());
    9. String token = JWTConfig.getToken(map);
    10. result.put("state",true);
    11. result.put("msg","登录成功");
    12. result.put("token",token); //成功返回token
    13. } catch (Exception e) {
    14. e.printStackTrace();
    15. result.put("state","false");
    16. result.put("msg",e.getMessage());
    17. }
    18. return result;
    19. }

    Srvice层

    User selUser(User user);

    ServiceImpl层

    1. @Transactional(propagation = Propagation.SUPPORTS)
    2. public User selUser(User user) {
    3. User userDB = userMapper.selUser(user);
    4. if(userDB!=null){
    5. return userDB;
    6. }
    7. throw new RuntimeException("登录失败");
    8. }

    Mapper层

    User selUser(User user);

    Mapper.xml层


     

  • 相关阅读:
    Python 列表推导式深入解析
    C#.NET 国密SM3 HASH 哈希 与JAVA互通 ver:20230803
    数字世界中的定位专家,手机号码归属地数据源下载!
    C++11标准模板(STL)- 算法(std::stable_sort)
    SpringBoot + React Ant Design 实现图片上传到Minio 中
    OneFlow的大模型分片保存和加载策略
    py19_初识 Python 异常处理的简单总结
    一种基于多神经网络的烟支缺陷分类与定位方法
    Stable diffusion采样器详解
    Mathorcup数学建模竞赛第二届-【妈妈杯】C题:地质灾害评价的数学模型分析(附带赛题解析&获奖论文及MATLAB代码)
  • 原文地址:https://blog.csdn.net/qq_55629923/article/details/126292289