使用过滤器实现用户权限控制,有两种方式可以采用。
第一种方式是为每个要过滤的页面写一个过滤器,如果要过滤的页面较多,这种方法工作量将很大;
另一种方式是将要过滤的页面放入文件夹,对整个文件夹下的文件写一个过滤器,这种方式可以节省很多代码。
user.jsp、publish.jsp等页面放入权限文件夹admin,没有登录则用过滤器掉用户的请求,使其不能访问admin文件夹中的文件。
1.为user.jsp、publish.jsp各自添加过滤器
(1) UserFilter.java文件
(2)PublishFilter .java文件
(3)两个过滤器的配置写入web.xml文件,可以看到/jsp/user.jsp和/jsp/publish.jsp都被过滤掉了。
<?xml version="1.0" encoding="UTF-8"?><web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<filter>
<filter-name>UserFilter</filter-name>
<filter-class>cn.cszyedu.filter.UserFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>UserFilter</filter-name>
<url-pattern>/jsp/user.jsp</url-pattern>
</filter-mapping>
<filter>
<filter-name>PublishFilter</filter-name> <filter-class>cn.cszyedu.filter.PublishFilter</filter-class>
</filter> <filter-mapping> <filter-name>PublishFilter</filter-name>
<url-pattern>/jsp/publish.jsp</url-pattern>
</filter-mapping>
</web-app>
2.第二种方式是在WebRoot下新建admin文件夹,将需要权限访问的页面都放入admin文件夹,为admin文件夹写一个过滤器。
FolderFilter .java (这里使用注解替代web.xml文件配置Filter)
@WebFilter(filterName="FolderFilter",urlPatterns="/admin/*",description="过滤admin文件夹下的所有文件")
public class FolderFilter implements Filter {
@Override public void destroy() {
}
@Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest request1 = (HttpServletRequest) request; HttpSession session = request1.getSession(); if(session.getAttribute("userName")!=null){ chain.doFilter(request, response); return;
}else{ ((HttpServletResponse)response).sendRedirect(request1.getContextPath()+"/jsp/login.jsp");
}
}
@Override public void init(FilterConfig arg0) throws ServletException {
}
}
效果如图所示(不登录访问/jsp/user.jsp、/jsp/publish.jsp和/admin/add.jsp页面,都因没有权限被过滤器过滤掉,而被强行跳转回login.jsp页面):


