这个filter的意思是登录后才能浏览其他页面
xml配置如下
<filter>
   <filter-name>SecurityFilter</filter-name>
   <filter-class>com.csy.filter.SecurityFilter</filter-class>
  </filter>
  <filter-mapping>
   <filter-name>SecurityFilter</filter-name>
   <url-pattern>/index.jsp</url-pattern>
   <dispatcher>REQUEST</dispatcher>
   <dispatcher>FORWARD</dispatcher>
  </filter-mapping>filtet代码如下
package com.csy.filter;import java.io.IOException;import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.Filter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;public class SecurityFilter implements Filter { public void init(FilterConfig filterConfig) { } public void doFilter(ServletRequest request, ServletResponse response,
FilterChain filterChain) throws ServletException, IOException{
HttpSession session = ((HttpServletRequest)request).getSession();
if(session.getAttribute("login") == null) {
((HttpServletResponse)response).sendRedirect("login.jsp");
} else {
filterChain.doFilter(request, response);
}
} public void destroy() { }}
为什么我还是可以不登录,直接访问到index.jsp呢?

解决方案 »

  1.   

    你那个文件里面写的不对吧,换成这个试试:<url-pattern>/*</url-pattern>
    这样就只能访问登陆页面了
      

  2.   

    if(session.getAttribute("login") == null) {
    ((HttpServletResponse)response).sendRedirect("login.jsp");

    filterChain.doFilter(request, response);换成这样试试,应该还是要调用后续其他拦截器的.fliter只是改了目标地址
      

  3.   

    打个断点调试,如果进不了SecurityFilter 里面的断点,则是web.xml中的拦截器没有写对。参考:
    <filter>
    <filter-name>LoginFilter</filter-name>
    <filter-class>
    com.csy.filter.SecurityFilter
    </filter-class>
    </filter>
    <filter-mapping>
    <filter-name>LoginFilter</filter-name>
    <url-pattern>*.action</url-pattern>
    </filter-mapping>
    <filter-mapping>
    <filter-name>LoginFilter</filter-name>
    <url-pattern>*.jsp</url-pattern>
    </filter-mapping>
      

  4.   

    先看看参数的值有了没~~~~~要知道 strus2中用了自己的拦截器就意味着 原先的拦截器需要手动添加
      

  5.   

     知道为什么了,因为之前登录过一次,session还没有过期。请问一下,session不是在关闭浏览器后就会过期吗?为什么重新打开浏览器请求的还是同一个session?
      

  6.   

    搞个注销功能,注销后清空session