• 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层


     

  • 相关阅读:
    云效流水线docker部署 :node.js镜像部署VUE项目
    SpringBoot 22 Swagger配置扫描接口和开关、过滤url、根据环境决定使用
    R与Python:编程语言间的差异与魅力
    maven+artifactory 整个过程实操
    Java项目:SSM物业缴费管理系统
    死锁
    机器人和自动化技术
    Java集合04:TreeSet练习
    php查询大量sql语句时内存溢出的解决方法
    uni-app进行表单效验
  • 原文地址:https://blog.csdn.net/qq_55629923/article/details/126292289