以前论坛一位兄弟写的过滤器的例子:
/*首先写一个权限过滤filter*/
import javax.servlet.Filter;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.FilterChain;
import java.io.IOException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpServletResponse;
public class RightFilter
implements Filter {
public void init(FilterConfig filterConfig) throws ServletException {
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse res = (HttpServletResponse) response;
HttpSession session = req.getSession(true);
//从session里取的用户名信息
String username = (String) session.getAttribute("username");
//判断如果没有取到用户信息,就跳转到登陆页面
if (username == null || "".equals(username)) {
//跳转到登陆页面
res.sendRedirect("http://"+req.getHeader("Host")+"/login.jsp");
}
else {
//已经登陆,继续此次请求
chain.doFilter(request,response);
}
}
public void destroy() {
}
}
下面是使用说明:
然后在web.xml里配置那些JSP文件需要登陆权限验证:
1.如果是某个具体的JSP文件(如a.jsp)需要登陆验证
<web-app>
...
<filter>
<filter-name>right</filter-name>
<filter-class>com.taihuatalk.taihua.common.common.RightFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>right</filter-name>
<url-pattern>/a.jsp</url-pattern>
</filter-mapping>
...
</web-app>
2.如果是某一个目录(如a/目录)整个目录下的文件都需要登陆验证:
<web-app>
...
<filter>
<filter-name>right</filter-name>
<filter-class>com.taihuatalk.taihua.common.common.RightFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>right</filter-name>
<url-pattern>/a/*</url-pattern>
</filter-mapping>
...
</web-app>
--------------------------------------------------------------------------------另一朋友的!
----------------------web.xml--------------
<filter>
<filter-name>filterauthor</filter-name>
<filter-class>................................AuthorFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>filterauthor</filter-name>
<url-pattern>/secret/*</url-pattern>
</filter-mapping>
---------------java过滤器代码-----------(按这个改一下)我这个是判断是否登陆
import java.io.IOException;
import java.io.PrintWriter;
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 com.htits.vtmp.web.WebConstant;
import com.htits.vtmp.web.bean.VtmUser;
public final class AuthorFilter implements Filter {
private FilterConfig filterConfig = null;
private static final String CONTENT_TYPE = "text/html; charset=GB2312";
public void init(FilterConfig filterConfig) {
this.filterConfig = filterConfig;
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
VtmUser theUser=null;
try {
//--从session中读取User
theUser = (VtmUser) req.getSession().getAttribute(
WebConstant.SessionNameEnum.USER);
//System.out.println("URL:" + req.getRequestURI());
//System.out.println("filter:" + theUser.state);
} catch (Exception e) {
}
if(theUser==null){//--Session超时或用户未登录
sendInfo(request,response);
}
chain.doFilter(request, response);
}
public void destroy() {
this.filterConfig = null;
}
/**
*
* @param response
*/
public void sendInfo(ServletRequest request,ServletResponse response) {
try {
response.setContentType(CONTENT_TYPE);
PrintWriter out = response.getWriter();
out.println("<html><head>");
out.println("<link href=\"main.css\" rel=\"stylesheet\" type=\"text/css\">");
out.println("</head><body><SCRIPT LANGUAGE=\"JavaScript\"><!--");
out.println("var wnd=this.window;");
out.println("while(1){");
out.println("if(wnd==wnd.parent){");
out.println("break;");
out.println("}else");
out.println("wnd=wnd.parent;");
out.println("}");
out.println("alert('用户未登录或登录已超时,请重新登录!');");
out.println("wnd.navigate('" + ((HttpServletRequest)request).getContextPath() + "')");
out.println("//--></SCRIPT>");
out.println("</table></body></html>");
out.flush();
} catch (Exception e) {
}
}
}