在project应用中有一些url是不可以直接访问的,必须有授权或是经过某些处理才能访问,比如访问某些功能必须登录,某些功能必须是指定的用户才能访问,这些需要用到访问权限的控制,如果具有访问的权限,则允许访问,没权限则跳转到指定的处理页面。
package com.bird.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.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/**
* @author jzq
* URL 访问控制
* 2009-11-12
*/
public class AccessPurviewFilter extends HttpServlet implements Filter {
/**
* 重定向的URL
*/
private String redirectURl = null;
/** doFilter方法的第一个参数为ServletRequest对象。此对象给过滤器提供了对进入的信息(包括
* 表单数据、cookie和HTTP请求头)的完全访问。第二个参数为ServletResponse,通常在简单
* 的过滤器中忽略此参数。最后一个参数为FilterChain,此参数用来调用servlet或JSP页。
* -- 如果处理HTTP请求,并且需要访问诸如getHeader或getCookies等在ServletRequest中
* 无法得到的方法,就要把此request对象构造成HttpServletRequest
*/
public void doFilter(ServletRequest sRequest, ServletResponse sResponse,
FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) sRequest;
HttpServletResponse response = (HttpServletResponse) sResponse;
HttpSession session = request.getSession();
// 如果回话中的用户名为空,页面重新定向到登陆页面
if (session.getAttribute("userName") == null) {
String contextPath = request.getContextPath();
String currentPath = request.getRequestURI();
response.sendRedirect(contextPath + redirectURl);
}
}
public void init(FilterConfig arg0) throws ServletException {
redirectURl = "/login.jsp";
}
}
web.xml中配置要过滤的URL:
<filter> <filter-name>AccessPurviewFilter</filter-name> <filter-class>com.bird.filter.AccessPurviewFilter</filter-class> </filter> <filter-mapping> <filter-name>AccessPurviewFilter</filter-name> <url-pattern>/frame/*</url-pattern> </filter-mapping>上面配置当用户进入 frame 文件夹下的页面的时候,程序会进入 AccessPurviewFilter 里的doFilter方法里,进行权限的判断。