1. 程式人生 > 其它 >HandlerMethodArgumentResolver 和 jwt 實現許可權認證

HandlerMethodArgumentResolver 和 jwt 實現許可權認證

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 “成功”;
    }