HandlerMethodArgumentResolver 和 jwt 實現許可權認證
阿新 • • 發佈:2021-08-25
token管理類
public class UserTokenManager { //生成TOKEN public static String generateToken(Integer id) { JwtHelper jwtHelper = new JwtHelper(); return jwtHelper.createToken(id); } //根據TOKEN獲取使用者ID public static Integer getUserId(String token) { JwtHelper jwtHelper= new JwtHelper(); Integer userId = jwtHelper.verifyTokenAndGetUserId(token); if(userId == null || userId == 0){ return null; } return userId; } }
建立請求攔截註解,處理登陸許可權
@Target(ElementType.PARAMETER) @Retention(RetentionPolicy.RUNTIME) public @interface LoginUser { }
攔截處理方法
public class LoginUserHandlerMethodArgumentResolver implements HandlerMethodArgumentResolver { public static final String LOGIN_TOKEN_KEY = "X-Authentication-Token"; @Override public boolean supportsParameter(MethodParameter parameter) { return parameter.getParameterType().isAssignableFrom(Integer.class) && parameter.hasParameterAnnotation(LoginUser.class); } @Override public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer container, NativeWebRequest request, WebDataBinderFactory factory) throws Exception { String token = request.getHeader(LOGIN_TOKEN_KEY); if (token == null || token.isEmpty()) { return null; } return UserTokenManager.getUserId(token); } }
建立WxWebMvcConfiguration配置類,並繼承WebMvcConfigurer
@Configuration public class WxWebMvcConfiguration implements WebMvcConfigurer { @Override public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) { argumentResolvers.add(new LoginUserHandlerMethodArgumentResolver()); } }
然後就可以把校驗註解載入介面的引數中了
@GetMapping("test") public Object list(@LoginUser Integer userId) { return “成功”; }