文章纯原创,刚开始接触,如有大神请多开车,不要赶下车...
正文:
1、起因:
环境是在SSM下搭建的,一个后台管理系统为了限制用户未登录的情况下只能访问 登录页面(login.jsp),登录页面当中也引用了一些静态资源文件如:css, js, image 等。
2、filter 和 interceptors的环境配置:
filter 针对性的拦截配置文件
web.xml 配置文件中设置
<!-- 登录过滤器 -->
<filter>
<filter-name>PrivilegeFilter</filter-name>
<filter-class>com.zxl.filter.PrivilegeFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>PrivilegeFilter</filter-name>
<url-pattern>*.jsp</url-pattern>
<url-pattern>*.html</url-pattern>
</filter-mapping>
interceptors 拦截器配置:
实体类:
public class BackManageInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest req, HttpServletResponse resp, Object arg2) throws Exception {
}
}
springmvc.xml:
<!-- 拦截器 -->
<mvc:interceptors>
<bean class="com.zxl.interceptor.BackManageInterceptor"></bean>
</mvc:interceptors>
3、错误情况:
按照上面等配置的话一开始访问登录页面的话,filter 文件中进行判断如果是 login.jsp 的访问路径的话,进行忽略。但是interceptors 拦截器就把登录页面的一些样式.css 和部分图片进行拦截了,登录页面显示异常。同时无法访问登录用户调用数据库验证用户是否存在问题。
因此在 interceptors 拦截器页面的 preHandle 方法内添加后缀为登录页面的控制器,后缀为静态资源文件的一些文件设置,此时在运行的话,访问login.jsp登录页面正常,进入各个页面的控制器方法或者静态 .jsp 页面也正常访问。
我在登录后的页面当中添加了退出登录的按钮,清空session,并 请求转发到 login.jsp 页面,此时再进行访问 非登录页面的时候,任何 .jsp 成功拦截并跳转登录页面,任何控制器方法成功拦截,跳转登录页面。
但是如果在地址栏直接访问项目当中的静态资源文件的话,也能成功。这里就不知道问题所在了,看看有没有了解的。