原标题:Spring Boot 优雅的配置拦截器方式
其实spring boot拦截器的配置方式和springMVC差不多,只有一些小的改变需要注意下就ok了。下面主要介绍两种常用的拦截器:
一、基于URL实现的拦截器:
publicclassLoginInterceptorextendsHandlerInterceptorAdapter{
/**
* 在请求处理之前进行调用(Controller方法调用之前)
* 基于URL实现的拦截器
* @paramrequest
* @paramresponse
* @paramhandler
* @return
* @throwsException
*/
@Override
publicbooleanpreHandle(HttpServletRequest request, HttpServletResponse response, Object handler)throwsException{
String path = request.getServletPath();
if(path.matches(Const.NO_INTERCEPTOR_PATH)) {
//不需要的拦截直接过
returntrue;
} else{
// 这写你拦截需要干的事儿,比如取缓存,SESSION,权限判断等
System.out.println( "====================================");
returntrue;
}
}
}
关键代码:path.matches(Const.NO_INTERCEPTOR_PATH 就是基于正则匹配的url。
/**
* @author BianP
* @explain 常量类
*/
public classConst{
public staticfinalStringSUCCESS = "SUCCESS";
public staticfinalStringERROR = "ERROR";
public staticfinalStringFIALL = "FIALL";
/**********************对象和个体****************************/
public staticfinalStringSESSION_USER = "loginedAgent"; // 用户对象
public staticfinalStringSESSION_LOGINID = "sessionLoginID"; // 登录ID
public staticfinalStringSESSION_USERID = "sessionUserID"; // 当前用户对象ID编号
public staticfinalStringSESSION_USERNAME = "sessionUserName"; // 当前用户对象ID编号
public staticfinalInteger PAGE = 10; // 默认分页数
public staticfinalStringSESSION_URL = "sessionUrl"; // 被记录的url
public staticfinalStringSESSION_SECURITY_CODE = "sessionVerifyCode"; // 登录页验证码
// 时间 缓存时间
public staticfinalintTIMEOUT = 1800; // 秒
public staticfinalStringON_LOGIN = "/logout.htm";
public staticfinalStringLOGIN_OUT = "/toLogout";
// 不验证URL anon:不验证/authc:受控制的
public staticfinalStringNO_INTERCEPTOR_PATH = ".*/((.css)|(.js)|(images)|(login)|(anon)).*";
}
二、基于注解的拦截器
①创建注解:
/**
* 在需要登录验证的Controller的方法上使用此注解
*/
@Target({ElementType.METHOD})// 可用在方法名上
@Retention(RetentionPolicy.RUNTIME)// 运行时有效
public@interfaceLoginRequired {
}
②创建拦截器:
publicclassAuthorityInterceptorextendsHandlerInterceptorAdapter{
@Override
publicbooleanpreHandle(HttpServletRequest request, HttpServletResponse response, Object handler)throwsException{
// 如果不是映射到方法直接通过
if(!(handler instanceofHandlerMethod)) {
returntrue;
}
// ①:START 方法注解级拦截器
HandlerMethod handlerMethod = (HandlerMethod) handler;
Method method = handlerMethod.getMethod();
// 判断接口是否需要登录
LoginRequired methodAnnotation = method.getAnnotation(LoginRequired.class);
// 有 @LoginRequired 注解,需要认证
if(methodAnnotation != null) {
// 这写你拦截需要干的事儿,比如取缓存,SESSION,权限判断等
System.out.println( "====================================");
returntrue;
}
returntrue;
}
}
三、把拦截器添加到配置中,相当于SpringMVC时的配置文件干的事儿:
/**
* 和springmvc的webmvc拦截配置一样
* @authorBIANP
*/
@Configuration
publicclassWebMvcConfigurerextendsWebMvcConfigurationSupport{
@Override
publicvoidaddInterceptors(InterceptorRegistry registry){
// 拦截所有请求,通过判断是否有 @LoginRequired 注解 决定是否需要登录
registry.addInterceptor(LoginInterceptor()).addPathPatterns( "/**");
registry.addInterceptor(AuthorityInterceptor()).addPathPatterns( "/**");
super.addInterceptors(registry);
}
@Bean
publicLoginInterceptor LoginInterceptor(){
returnnewLoginInterceptor();
}
@Bean
publicAuthorityInterceptor AuthorityInterceptor(){
returnnewAuthorityInterceptor();
}
}
一定要加@Configuration 这个注解,在启动的时候在会被加载。还有一些教程是用的“WebMvcConfigurerAdapter”,也是一样的,但是会提示这个方法是过时的了。
其实springMVC很多东西,都可以搬到springboot中来使用,只需要把配置文件的模式,改成 对应@Configuration 类就好了。
来源:https://my.oschina.net
/bianxin/blog/2876640返回搜狐,查看更多
责任编辑: