
在工具包中新建JwtUtils
public class JwtUtils {
/***
* 签发JWT令牌
*
*/
public static String getToken(){
String token = "";
String STR = "yctxdy";//盐
token = JWT.create().withAudience("hly")
.withExpiresAt(new Date(System.currentTimeMillis() + 15 * 60 * 1000))//延时十五分钟
.sign(Algorithm.HMAC256(STR));
return token;
}
}
新建一个Interceptor包并新建一个Interceptor

public class Interceptor implements HandlerInterceptor {
/**
* 在DispatcherServlet之前执行
*
* @param request
* @param response
* @param handler
* @return
* @throws Exception
*/
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("拦截器生效");
//用HandlerMethod访问方法、方法上的注解、方法参数等等
HandlerMethod handlerMethod = (HandlerMethod) handler;
Method method = handlerMethod.getMethod();
//检查是否有PassToken注解,有则跳过认证
if (method.isAnnotationPresent(PassToken.class)) {
PassToken passToken = method.getAnnotation(PassToken.class);
if (passToken.required()) {
return true;
}
}
String token = request.getHeader("token");
// 判断一下token是否存在
if (token == null || token.length() ==0){
System.out.println("没哟登录");
return false;
}
//验证token
JWTVerifier jwtVerifier = JWT.require(Algorithm.HMAC256("****")).build();
try{
jwtVerifier.verify(token);
return true;
}catch (JWTVerificationException e){
e.printStackTrace();
return false;
}
}
/**
* 在controller执行之后的DispatcherServlet之后执行
*
* @param request
* @param response
* @param handler
* @param modelAndView
* @throws Exception
*/
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
}
/**
* 在页面渲染完成返回给客户端之前执行
*
* @param request
* @param response
* @param handler
* @param ex
* @throws Exception
*/
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
}
}
新建一个CustomAnnotation包
在下面新建一个类型为Annotation的java class
命名为PassToken
用来跳过拦截

@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface PassToken {
boolean required() default true;
}

在test中写一个跳过拦截测试和不跳过拦截的测试
先试一下aaa的


被拦截了
再试ttt的


成功了
在aaa的header里加入token

成功获取
博客介绍了在工具包中新建JwtUtils,创建Interceptor包和Interceptor,CustomAnnotation包及PassToken注解用于跳过拦截。还进行了跳过拦截和不跳过拦截的测试,在aaa的header里加入token后成功获取。
4186

被折叠的 条评论
为什么被折叠?



