servlet拦截器在WebSphere 8.5中运行时不起作用
我的项目中融合了SPring框架,但是我想在项目中使用servlet自定义拦截器,而不是使用Spring配置的拦截器。
我想要实现的功能是:
当用户访问应用时,如果没有登陆,则被拦截器拦截到,跳转到登陆页面,登陆成功后,返回登陆查询页面。
我的写法如下:
web.xml
<filter>
<filter-name>userLoginServletFilter1</filter-name>
<filter-class>com.filter.UserLoginServletFilter2</filter-class>
</filter>
<!-- 拦截所有的URL,判断是否登陆-->
<filter-mapping>
<filter-name>userLoginServletFilter1</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
filter类
package com.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
public class UserLoginServletFilter implements Filter
{
@Override
public void destroy()
{
System.out.println("destroy");
}
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain filterChain) throws IOException, ServletException
{
HttpServletRequest req = (HttpServletRequest)request;
HttpSession s = req.getSession();
if(req.getRequestURI().endsWith("login.jsp") || req.getRequestURI().endsWith("UserLoginServlet"))
{
System.out.println("Filter1 start");
filterChain.doFilter(request, response);
System.out.println("filter1 end");
return ;
}
if(null == s.getAttribute("user"))
{
System.out.println("Filter1 start..");
((HttpServletResponse)response).sendRedirect("login.jsp");
return;
}
else
{
System.out.println("Filter1 start....");
filterChain.doFilter(request, response);
}
}
@Override
public void init(FilterConfig filterConfig) throws ServletException
{
System.out.println("init");
}
}
UserLoginServletFilter
我的web.xml总出了这个拦截器只有一个编码过滤器,实际运行中发现,在本地tomcat中运行时,我想要的功能能够正常实现;
但是在服务器上的WebSphere 8.5中运行时,这个拦截器首次(清除IE缓存)在IE或者火狐上登陆时能正常被拦截器拦截(日志正常打印),且跳到登陆页面,登陆成功即可进入查询页面。但是我在这个查询页面不操作,等待session过期后,再次刷新这个查询页面 ,发现拦截器的日志并没有打印出来,但是也跳到了登陆页面,但是在登陆页面输入信息后,点击登陆,发现拦截器日志仍旧没有打印,而且留在了登陆页面(输入的信息没有了,怀疑是再次刷新了登陆页面),但是如果打开浏览器的调试模式,就能够正常登陆进去了,这是什么原因?
这个问题在IE和火狐上都有问题,只有谷歌浏览器不会出现这种情况,急求大神帮助。。。。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
你好,<filter-class/> 的类名是否写错了?