servlet拦截器在WebSphere 8.5中运行时不起作用

码上中国博客 发布于 2017/10/13 10:35
阅读 233
收藏 0

我的项目中融合了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和火狐上都有问题,只有谷歌浏览器不会出现这种情况,急求大神帮助。。。。

加载中
0
UncleBen
UncleBen
你好,<filter-class/> 的类名是否写错了?
返回顶部
顶部