spring mvc定义登录拦截器(不登录不让访问相关资源),为什么要放权/login.do(就是不拦截/login.do)?
2016-05-30 21:28
501 查看
spring.xml拦截器配置如下:
<mvc:interceptor>
<mvc:mapping path="/**" />
<mvc:exclude-mapping path="/login.do" />
<bean class="org.bjlx.base.login.AuthInterceptor"></bean>
</mvc:interceptor>
拦截器类配置如下:
public class AuthInterceptor implements HandlerInterceptor {
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object obj) throws Exception {
Object sessionObj = request.getSession().getAttribute("USERDETAIL");
if(sessionObj!=null) {
return true;
}
response.sendRedirect("login.do");
return false;
}
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object obj, ModelAndView mav) throws Exception { }
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object obj, Exception e) throws Exception { }
}
如果对login.do进行放权的话,输入任何一个地址如:http://127.0.0.1:8080/test,就会一直在AuthInterceptor中挑不出来。
因为如果不放权/login.do,执行过程是这样的:
1输入http://127.0.0.1:8080/test
2被拦截器拦截,执行AuthInterceptor 代码,response.sendRedirect("login.do"); 即执行http://127.0.0.1:8080/login.do,而login.do又被拦截器拦截,再次执行AuthInterceptor 代码代码,如此循环往复!
<mvc:interceptor>
<mvc:mapping path="/**" />
<mvc:exclude-mapping path="/login.do" />
<bean class="org.bjlx.base.login.AuthInterceptor"></bean>
</mvc:interceptor>
拦截器类配置如下:
public class AuthInterceptor implements HandlerInterceptor {
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object obj) throws Exception {
Object sessionObj = request.getSession().getAttribute("USERDETAIL");
if(sessionObj!=null) {
return true;
}
response.sendRedirect("login.do");
return false;
}
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object obj, ModelAndView mav) throws Exception { }
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object obj, Exception e) throws Exception { }
}
如果对login.do进行放权的话,输入任何一个地址如:http://127.0.0.1:8080/test,就会一直在AuthInterceptor中挑不出来。
因为如果不放权/login.do,执行过程是这样的:
1输入http://127.0.0.1:8080/test
2被拦截器拦截,执行AuthInterceptor 代码,response.sendRedirect("login.do"); 即执行http://127.0.0.1:8080/login.do,而login.do又被拦截器拦截,再次执行AuthInterceptor 代码代码,如此循环往复!
相关文章推荐
- java线程概述
- Java基础练习2之用集合写员工管理系统
- Java设计模式之单例模式(Singleton)
- ubuntu上安装jdk1.8
- java静态方法学习小结
- Java一些知识点的总结
- Java 之 线程的生命周期(一)
- JAVA学习笔记整理五(JAVA常用类库)
- JAVA014--异常
- 【Java】LRS最小重复子串
- 【Java学习笔记】进制转换
- JAVA之旅(十)——异常的概述,Try-Catch,异常声明Throws,多异常处理,自定义异常,Throw和Throws的区别
- JAVA之旅(十)——异常的概述,Try-Catch,异常声明Throws,多异常处理,自定义异常,Throw和Throws的区别
- JAVA学习笔记整理四(异常处理)
- 一些错误和解决办法--01
- JAVA学习笔记整理三(抽象类、接口、匿名类)
- java的动态代理机制详解 动态代理类
- spring中AOP——注解实现
- Java 内省机制
- Spring.No1 ----整理---Spring学习的第一课