使用註解去判斷當前接口是否登錄

①自定義註解

@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(){
		...
	}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章