参考文章:http://dev.yesky.com/238/2114738.shtml
一个用来强制用户登录的过滤器
1、UserFilter.java
//--------------------------UerFilter.java------------------------------------
package com.xyn.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.HttpSession;
import com.xyn.struts.Constants;
import com.xyn.struts.form.UserInfo;
public class UserFilter implements Filter {
UserInfo user = null;
private String url;
public void init(FilterConfig config) throws ServletException {
// TODO init when filter works
//从web.xml中的filter-mapping中得到设置参数
this.url = config.getInitParameter("nouser");
System.out.println(url);
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
// TODO Auto-generated method stub
HttpServletRequest hreq = (HttpServletRequest) request;
HttpSession session = hreq.getSession(true);
user = (UserInfo)session.getAttribute(Constants.PERSON_KEY);
if(user==null){
System.out.println("no user!");
request.getRequestDispatcher(url).forward(request,response);
}
else{
System.out.println("hello"+user.getUsername());
chain.doFilter(request,response);
}
}
public void destroy() {
// TODO Auto-generated method stub
user = null;
url = null;
}
}
//-----------------------end of UserFilter.java---------------------------
2、web.xml中的配置
<filter>
<filter-name>Get User Info</filter-name>
<filter-class>com.xyn.filter.UserFilter</filter-class>
<init-param>
<param-name>nouser</param-name>
<param-value>/form/userInfo.jsp</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>Get User Info</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
注意<url-pattern>的设置。设置为“*.jsp”是为了对所有的jsp页面进行过滤。如果设为“/*”,则对于所有的页面都进行过滤。这样会产生一个问题:由于用户信息是提交到UserLogin.do进行登录,在执行UserLogin.do的代码之前,过滤器即进行判断,发现用户信息为空,于是跳转到其它指定的页面。
设置为*.jsp就只对jsp页面进行过滤。但今后肯定会对action也要进行过滤。如何解决?放在不同的目录中?考虑中...