一、要实现的功能
1.使用Filter对用户进行权限控制,使没有权限的用户不能访问指定一面。
二、实现思路
1.其实没什么思路,很简单的问题,Filter就相当于在客户端和服务端装了一个防火墙,所有请求在发送到服务端进行处理之前,都要先通过防火墙的安检,合法的用户就让你访问服务资源,不合法的用户就让他登录后再访问。Filter还有其他的功能,比如说和FilterChain一起使用,可以进行好几次过滤,除了过滤权限,还可以过滤特殊以及非法的字符。进行统一编码之类的工作。
2.Filter的基本原理在http://zhangjunhd.blog.51cto.com/113473/20629写的很好。
三、代码
- public class UserFilter implements Filter{
- public void init(FilterConfig config)throws ServletException{//初始化过滤器
- }
- public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
- throws IOException, ServletException {//进行过滤
- HttpServletRequest req = (HttpServletRequest) request;
- HttpServletResponse resp = (HttpServletResponse) response;
- HttpSession session = req.getSession();
- Map map = (Map) req.getSession().getAttribute("LoginUser");
- if (null==map) {//过滤条件
- resp.sendRedirect("/error.jsp");//失败后跳转页面
- }else {
- chain.doFilter(request, response);//将请求转发到下一个过滤器
- }
- }
- public void destroy() {
- }
- }
四、总结
1.又是一个非常简单的问题让我花了那么长时间,思路上没什么问题,这和访问控制列表在思想上是差不多的,不就是进行判断吗,关键是代码的组织上,在跳转页上遇到了些小问题,路径前面忘了加/了,真无语了。
2.还有一个问题是不能忽视的,FilterConfig,这个是根据你的需求进行个性化配置的东西,可以在部署描述中即在web.xml中进行初始化配置。
3.在web.xml中部署Filter的时候<filter-mapping>元素还可以包含0-4个<dispatcher>元素,<dispatcher>元素指定指定过滤器对应的请求方式,REQUEST,INCLUDE,FORWARD,ERROR四种之一,默认为REQUEST.这里的意思就是说,Filter不但能接收用户用REQUEST方式提交的请求,还能接受通过RequestDispatacher“转发”过来的请求。
4.这只是最简单的过滤的问题,还有替换的功能。这里先不说了。