我有个过滤用户登如的
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
public class CharacterFilter extends HttpServlet implements Filter {
private FilterConfig filterConfig;
public void init(FilterConfig filterConfig) throws ServletException {
this.filterConfig = filterConfig;
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) {
HttpServletRequest sr = (HttpServletRequest)request;
HttpSession session = sr.getSession();
//获得session
//判断用户是否登录,如果没有,
ServletContext sc = filterConfig.getServletContext();
RequestDispatcher rd = sc.getRequestDispatcher("/login.jsp");
try {
rd.forward(request,response); //转发到login.jsp让用户登录
filterChain.doFilter(request, response);
}catch (ServletException sx) {
filterConfig.getServletContext().log(sx.getMessage());
} catch (IOException iox) {
filterConfig.getServletContext().log(iox.getMessage());
}
}
}
在web.xml
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE web-app
  PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"
  "http://java.sun.com/j2ee/dtds/web-app_2_2.dtd"><web-app>
  <display-name>HelloApp Struts Application</display-name>
  <filter>
  <filter-name>characterfilter</filter-name>
  <filter-class>com.filter.CharacterFilter</filter-class>
  </filter>
  <filter-mapping>
  <filter-name>characterfilter</filter-name>
  <url-pattern>/*</url-pattern>
  </filter-mapping>
怎么没有登入的时候还能点其他页面啊?????????????

解决方案 »

  1.   

    你的逻辑有点错误,应该是在登陆的处理页面如果用户成功登陆,那么就在session里setAtrribute一个对象。然后过滤器中就是按你那样先去session对象,但是后面的你没有做,应该是这样:取出session对象后,然后getAttribute你在登陆处理页面set的那个attribute,如果为null,则说明没有登陆,如果不为null则说明登陆了。具体还可以取出用户的详细信息等等你可以自己去深化。
      

  2.   

    我推测
    如果代码没错的话就是下面的原因
    web容器只会在servlet.service执行完毕后才会相应的内容写响应包
    你配置过滤器
    并在这里getRequestDispatcher("/login.jsp");是不起作用了
    你在这里设置是会被在后面get,post方法里的代码覆盖的web不是gui