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;
}