web.xml
代码:
<servlet>
<servlet-name>springDispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext-mvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springDispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
applicationContext-mvc.xml
注意:<beans xsi:schemaLocation="">里面需要http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd,版本需要3.2以上才可以有后面的请求过滤mvc:exclude-mapping。
代码:
<mvc:interceptors>
<!-- 配置登陆拦截器 -->
<mvc:interceptor>
<!-- /** 表示所有的url,包括子url路径 -->
<mvc:mapping path="/**" />
<!-- mvc:exclude-mapping过滤,js文件夹下的所有文件包括子路径的文件都不拦截 -->
<mvc:exclude-mapping path="/js/**"/>
<!-- 配置拦截类 (com.***.filter包名;LoginHandlerIntercepter类名)-->
<bean class="com.***.filter.LoginHandlerIntercepter"></bean>
</mvc:interceptor>
</mvc:interceptors>
<!-- mvc:exclude-mapping配置的这里需要再配一次这个,主要是用来进行静态资源的访问,因为可以静态资源(css.js)收到拦截器影响而获取不到 -->
<mvc:resources location="/js/" mapping="/js/**"/>
LoginHandlerIntercepter.java
代码:
package com.***.filter;
import java.util.Arrays;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import com.cyimayi.bean.User;
/**
* 登陆拦截器 场景:用户点击查看的时候,我们进行登陆拦截器操作,判断用户是否登陆? 登陆,则不拦截,没登陆,则转到登陆界面; TODO 作者:原明卓
* 时间:2016年1月8日 下午3:25:35 工程:SpringMvcMybatis1Demo
*/
public class LoginHandlerIntercepter implements HandlerInterceptor {
@Override
public void afterCompletion(HttpServletRequest request,
HttpServletResponse response, Object arg2, Exception arg3)
throws Exception {
}
@Override
public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1,
Object arg2, ModelAndView arg3) throws Exception {
}
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse arg1, Object arg2) throws Exception {
String requestURI = request.getServletPath();
String[] arr = {"/user/login", ""};
List<String> list = Arrays.asList(arr);
if (!list.contains(requestURI)) {
// 说明处在编辑的页面
HttpSession session = request.getSession();
User user = (User) session.getAttribute("loginUser");
if (user != null) {
// 登陆成功的用户
return true;
} else {
session.setAttribute("lastUrl", requestURI);//保存路径,登录后跳回拦截前的页面
// 没有登陆,转向登陆界面
request.getRequestDispatcher("/login.jsp").forward(request, arg1);
return false;
}
} else {
return true;
}
}
}