Jwt-整合SpringBoot

pom文件+配置

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

        <!--数据库驱动-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.41</version>
        </dependency>
        <!--mybatis依赖-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.1</version>
        </dependency>
        <!-- lombok-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.20</version>
        </dependency>
spring:
  datasource:
    url: jdbc:mysql://rm-bp18jitlw9a952i5x3o.mysql.rds.aliyuncs.com:3306/yeb?userSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8
    driver-class-name: com.mysql.jdbc.Driver
    username: root
    password: 123456

mybatis:
  mapper-locations: classpath:mybatis/mapper/*.xml

user-pojo-dao-service-controller准备

User

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
    private Integer id;
    private String username;
    private String password;
    private String salt;
}
@Mapper
public interface UserDao {
    //根据用户名和密码查询用户
     User getUserByUserNameAndPassword(User user);
}
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
    PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.kcl.dao.UserDao">
    <select id="getUserByUserNameAndPassword" resultType="com.kcl.pojo.User"  parameterType="com.kcl.pojo.User">
       select * from t_user where username = #{username} and password = #{password}
    </select>
</mapper>
@Service
public class UserServiceImpl{

    @Autowired(required = true)
    UserDao mUserDao;

    public User getUserByUserNameAndPassword(User user){
        User user1 = mUserDao.getUserByUserNameAndPassword(user);
        if(user1 != null)
            return user1;
        else{
            throw new RuntimeException("登录失败");
        }
    }
}
@Controller
public class UserController {
    @Autowired
    UserServiceImpl mUserService;

    @ResponseBody
    @GetMapping("/user/login")
    public Map<String,Object> login(User user){
        System.out.println(user.getUsername());
        System.out.println(user.getPassword());

        Map<String,Object> map = new HashMap<>();
        try {
            User dbuser = mUserService.getUserByUserNameAndPassword(user);
            map.put("code",200);
            map.put("msg","认证成功");

        } catch (Exception e) {
           // e.printStackTrace();
            map.put("code",400);
            map.put("msg","认证失败");
        }
        return  map;

    }

jwt拦截器整合

public class JwtInterceptors implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {

        //从请求header中获取token
        String token = request.getHeader("token");
        Map<String,Object> map = new HashMap<>();

        try {
            JwtUtils.verify(token);
            return true;   //放行 --> controller继续处理

        } catch (SignatureVerificationException e) {
            map.put("msg","签名不一致异常");
        }catch (TokenExpiredException e){
            map.put("msg","令牌过期异常");
        }catch (AlgorithmMismatchException e){ //不会出现,自己已经规定了
            map.put("msg","算法不匹配异常");
        }catch (InvalidClaimException e){
            map.put("msg","失效Playload异常");
        }catch (Exception e){
            map.put("msg","其他异常");
        }
        map.put("state",false);
        //拦截并返回json信息
        String json = new ObjectMapper().writeValueAsString(map); // map --> json
        response.setContentType("application/json; charset=UTF-8");
        response.getWriter().println(json);
        return false;
    }
}
@Configuration
public class InterceptorConfig implements WebMvcConfigurer {

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new JwtInterceptors())
                .addPathPatterns("/test") //拦截
                .excludePathPatterns("/user/login"); //不拦截
    }
}

测试

    @GetMapping("/test")
    @ResponseBody
    public Map<String,Object> test(HttpServletRequest request){
        String token = request.getHeader("token");
        String username = JwtUtils.verify(token).getClaim("username").asString();
        String id = JwtUtils.verify(token).getClaim("id").asString();

        Map<String,Object> map = new HashMap<>();
        map.put("state",true);
        map.put("id",id);
        map.put("username",username);
        return  map;
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SpringBoot整合JWT是一种常用的实现权限验证功能的方式。JWT(Json Web Token)是一种基于JSON的开放标准,用于在网络应用环境中传递声明。在SpringBoot项目中整合JWT,可以实现用户身份验证和访问控制的功能。 整合JWT的步骤如下: 1. 在项目的pom文件中添加JWT依赖。可以使用com.auth0的java-jwt库,具体的依赖配置如下: ```xml <dependency> <groupId>com.auth0</groupId> <artifactId>java-jwt</artifactId> <version>3.4.0</version> </dependency> ``` 2. 创建用户实体类。可以使用@Data注解自动生成getter和setter方法,示例如下: ```java package com.example.manageserve.controller.dto; import lombok.Data; @Data public class UserDTO { private String username; private String password; private String nickname; private String token; } ``` 3. 将拦截器注入到SpringMVC。创建一个配置类,实现WebMvcConfigurer接口,并重写addInterceptors方法,如下所示: ```java package com.example.manageserve.config; import com.example.manageserve.config.interceptor.JwtInterceptor; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; @Configuration public class InterceptorConfig implements WebMvcConfigurer { @Override public void addInterceptors (InterceptorRegistry registry){ registry.addInterceptor(jwtInterceptor()) .addPathPatterns("/**") //拦截所有请求,通过判断token是否合法来决定是否需要登录 .excludePathPatterns("/user/login","/user/register"); } @Bean public JwtInterceptor jwtInterceptor(){ return new JwtInterceptor(); } } ``` 通过以上步骤,我们可以实现SpringBootJWT整合,实现了用户的登录和权限验证功能。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [xmljava系统源码-JWT-DEMO:SpringBoot整合JWT完成权限验证功能示例](https://download.csdn.net/download/weixin_38641764/19408331)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [springboot集成JWT](https://blog.csdn.net/weixin_67958017/article/details/128856282)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值