Spring MVC 拦截器实现
自定义拦截器类
public class SessionInterceptor extends HandlerInterceptorAdapter {
public SessionInterceptor() { // TODO Auto-generated constructor stub}private List<String> excludedUrls;//通过属性注册不需要过滤的url listpublic void setExcludedUrls(List<String> excludedUrls) { this.excludedUrls = excludedUrls;}@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { String requestUrl = request.getRequestURI(); //排除不需要过滤的URL for(String url:excludedUrls) { if(requestUrl.endsWith(url)) { return true; } } //获取当前的会话session HttpSession session = request.getSession(); if(session.getAttribute("userid") == null) { //若登录session过期或不存在就跳转到login页面 request.getRequestDispatcher("/login.jsp").forward(request, response); return false; } return true;}
}
springmvc-servlet.xml 拦截器注册
<mvc:interceptors>
<mvc:interceptor>
<!--
/*的意思是所有文件夹及里面的子文件夹
/是所有文件夹,不含子文件夹
/是web项目的根目录
-->
<mvc:mapping path="/**" />
<!-- 需排除拦截的地址 -->
<!-- <mvc:exclude-mapping path="/login"/> -->
<bean id="commonInterceptor" class="com.skcc.chart.interceptor.SessionInterceptor">
<property name="excludedUrls">
<list>
<value>/login</value>
</list>
</property>
</bean> <!--这个类就是我们自定义的Interceptor --> </mvc:interceptor> <!-- 当设置多个拦截器时,先按顺序调用preHandle方法,然后逆序调用每个拦截器的postHandle和afterCompletion方法 --></mvc:interceptors> <!-- Handles HTTP GET requests for /resources/** by efficiently serving up static resources in the ${webappRoot}/resources directory --><mvc:resources mapping="/resources/**" location="/resources/" order="0" /><mvc:resources mapping="/js/**" location="/js/" order="0" /><mvc:resources mapping="/css/**" location="/css/" order="0" /> <!-- Spring MVC不处理静态资源 --><mvc:default-servlet-handler /> <!-- 配置注解的处理器映射器和处理器适配器 --><mvc:annotation-driven ></mvc:annotation-driven> HandlerInterceptorAdapter不能拦截WEB-INF目录以外的jsp文件;若需拦截默认index.jsp;可以将index.jsp移动目录到WEB-INF下即可;
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。