软件工程日报04
继续练习,完成了登录及校验,完善个人信息等用户功能
其中相比之前在登陆功能上使用了jwt,目的是让用户在未登陆时无法访问界面。
导入依赖
<dependency>
<groupId>com.auth0</groupId>
<artifactId>java-jwt</artifactId>
<version>4.4.0</version>
</dependency>
创建工具类实现生成token和验证功能 其中key在创建与验证必须要相同
private static final String KEY = "free";
//接收业务数据,生成token并返回
public static String genToken(Map<String, Object> claims) {
return JWT.create()
.withClaim("claims", claims)
.withExpiresAt(new Date(System.currentTimeMillis() + 1000 * 60 * 60 * 12))
.sign(Algorithm.HMAC256(KEY));
}
//接收token,验证token,并返回业务数据
public static Map<String, Object> parseToken(String token) {
return JWT.require(Algorithm.HMAC256(KEY))
.build()
.verify(token)
.getClaim("claims")
.asMap();
}
在此基础上为了不在每一个业务层都调用jwt工具类,采用拦截器来实现便捷开发
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//令牌验证 获取token
String token = request.getHeader("Authorization");
try {
Map<String,Object> claims = JwtUtil.parseToken(token);
//把业务数据存储到ThreadLocal中
ThreadLocalUtil.set(claims);
//放行
return true;
} catch (Exception e){
response.setStatus(401);
//不放行
return false;
}
}
定义配置类,添加到拦截器注册列表
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Autowired
private LoginInterceptor loginInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
//登录和注册不拦截
registry.addInterceptor(loginInterceptor).excludePathPatterns("/user/login","/user/register");
}
}

浙公网安备 33010602011771号