最近在进行项目开发的时候需要对接口做Session验证
自定义一个注解@AuthCheckAnnotation
1 |
|
定义一个相应的拦截器,在springMVC配置文件中进行配置
拦截器:
spring为我们提供了org.springframework.web.servlet.handler.HandlerInterceptorAdapter这个适配器,继承此类,可以非常方便的实现自己的拦截器。可以根据我们的需要重写preHandle、postHandle、afterCompletio方法。
分别实现预处理、后处理(调用了Service并返回ModelAndView,但未进行页面渲染)、返回处理(已经渲染了页面)
- 在preHandle中,可以进行编码、安全控制等处理;
- 在postHandle中,有机会修改ModelAndView;
- 在afterCompletion中,可以根据ex是否为null判断是否发生了异常,进行日志记录。在springMVC.xml文件中添加拦截器
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24public class AuthCheckInteceptor extends HandlerInterceptorAdapter {
UserInfoService userInfoService ;
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
HandlerMethod methodHandler=(HandlerMethod) handler;
AuthCheckAnnotation auth=methodHandler.getMethodAnnotation(AuthCheckAnnotation.class);
//如果方法中添加了@AuthCheckAnnotation 这里的auth不为null
//如果@AuthCheckAnnotation(check=false) 这里的auth为false,即不用进行拦截验证,@AuthCheckAnnotation默认为前面定义的true
if(auth!=null&&!auth.check()){
return true;
}
UserInfo user=(UserInfo)request.getSession().getAttribute(Constants.SESSION_USER);
try {
userInfoService.login(request, user);
return true;
} catch (Exception e) {
request.getRequestDispatcher("login.do").forward(request, response);
return false;
}
}
}1
2
3
4
5
6<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/*.do" />
<bean class="com.party.common.interceptor.AuthCheckInteceptor"/>
</mvc:interceptor>
</mvc:interceptors>
在springMVC controller中使用实例
1 |
|