标签:build 进入 handler type obj void 配置 control 算法
1、依赖
<dependency>
<groupId>com.auth0</groupId>
<artifactId>java-jwt</artifactId>
<version>3.4.0</version>
</dependency>
2、JWT工具类生成
import com.auth0.jwt.JWT;
import com.auth0.jwt.JWTCreator;
import com.auth0.jwt.JWTVerifier;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.interfaces.DecodedJWT;
import java.util.Calendar;
import java.util.Map;
public class JWTUtils {
public static final String SING="asdasdadada";
//生成token
public static String getToken(Map<String,String> map){
Calendar instance=Calendar.getInstance();
instance.add(Calendar.DATE,7);//默认过期时间
//创建jet builder
JWTCreator.Builder builder= JWT.create();
//payload
map.forEach((k,v)->{
builder.withClaim(k,v);
});
String token = builder.withExpiresAt(instance.getTime())//指定国企时间
.sign(Algorithm.HMAC256(SING));
return token;
}
//验证token
public static DecodedJWT verify(String token){
return JWT.require(Algorithm.HMAC256(SING)).build().verify(token);
}
//获取token信息方法
// public static DecodedJWT getTokenInfo(String token){
// DecodedJWT verify = JWT.require(Algorithm.HMAC256(SING)).build().verify(token);
// return verify;
// }
}
3、JWT拦截器
import com.alibaba.fastjson.JSONObject;
import com.auth0.jwt.exceptions.AlgorithmMismatchException;
import com.auth0.jwt.exceptions.SignatureVerificationException;
import com.auth0.jwt.exceptions.TokenExpiredException;
import com.auth0.jwt.interfaces.DecodedJWT;
import com.example.vuetest01.library.entity.Userregister;
import com.example.vuetest01.library.utils.Consts;
import com.example.vuetest01.library.utils.JWTUtils;
import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.HashMap;
import java.util.Map;
public class JWTIntercepter implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
String token = request.getHeader("token");
JSONObject jsonObject=new JSONObject();
try {
DecodedJWT verify = JWTUtils.verify(token);//验证令牌
return true;//-------直接放行
} catch (SignatureVerificationException e) {
e.printStackTrace();
jsonObject.put(Consts.MSG,"无效签名");
}catch (TokenExpiredException e){
jsonObject.put(Consts.MSG,"tiken过期");
}catch (AlgorithmMismatchException e){
jsonObject.put(Consts.MSG,"token算法不一致");
}catch (Exception e){
jsonObject.put(Consts.MSG,"token无效");
}
jsonObject.put("state",false);//-----设置状态
response.setContentType("application/json;charset=UTF-8");
response.getWriter().println(jsonObject);
return false;
}
}
5、mvc配置
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(new JWTIntercepter())
.addPathPatterns("/user/**")
.excludePathPatterns("/**");//所有的用户都放行
}
}
6、controller登录测试
@GetMapping("/login")
@ResponseBody
//@CrossOrigin @RequestBody @Validated
public Object login( Userregister userregister){
// session.setAttribute(Consts.NAME,userregister.getUsername());
System.out.println("进入login...");
JSONObject jsonObject=new JSONObject();
Map<String,Object> map=new HashMap<>();
try {
Userregister userregister1 = (Userregister) userregisterService.userLogin(userregister);
//------------token
Map<String,String> map1=new HashMap<>();
map1.put("username",userregister1.getUsername());
map1.put("password",userregister1.getPassword());
String token = JWTUtils.getToken(map1);
jsonObject.put(Consts.CODE,201);
jsonObject.put(Consts.MSG,"认证成功");
jsonObject.put("token",token);// --------------------
} catch (Exception e) {
jsonObject.put(Consts.CODE,500);
jsonObject.put(Consts.MSG,"认证失败");
}
return jsonObject;
}
@PostMapping("/user/test")
@ResponseBody
public Object testq(){
JSONObject jsonObject=new JSONObject();
//处理自己的业务逻辑
jsonObject.put(Consts.CODE,666);
jsonObject.put(Consts.MSG,"啦啦啦!德玛西亚");
return jsonObject;
}
7、postman测试下即可,我这边token是在请求头里面!
标签:build 进入 handler type obj void 配置 control 算法
原文地址:https://www.cnblogs.com/JunHello/p/14328197.html