①自定義註解
@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(){
...
}
}