使用注解去判断当前接口是否登录

①自定义注解

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface LoginRequired {
    boolean isNeedLogin() default true;
}

②使用拦截器判断该接口是否需要登录

@Component
public class AuthInterceptor extends HandlerInterceptorAdapter {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object 
handler) throws Exception {
        //判断该请求请求是否有LoginRequired注解
        HandlerMethod hm = (HandlerMethod) handler;
        LoginRequired methodAnnotation = hm.getMethodAnnotation(LoginRequired.class);
        if (methodAnnotation != null) {
            /**
            * 进行登录登录校验loginCheck
            */
            //校验不通过,并且必须登录
            if (loginCheck == false && methodAnnotation.isNeedLogin() == true) {
                //response.sendRedirect 重定向到登录界面
                return false;
            }

        }
        return true;

    }
}

③注册拦截器

@Configuration
public class WebMvcConfiguration extends WebMvcConfigurerAdapter {

    @Resource
    AuthInterceptor authInterceptor;

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(authInterceptor).addPathPatterns("/**");
        super.addInterceptors(registry);
    }
}

④对需要登录校验的接口加上注解

@RestController
public class PayController{
	
	@LoginRequired(isNeedLogin = true)
	@GetMapping("/pay")
	public void pay(){
		...
	}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章