权限控制 filter

简介: 权限控制 filter
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
/**
 * Created by Administrator on 2016/11/23.
 */
public class PermissionFilter implements Filter {
    private HttpServletRequest request;
    private HttpServletResponse response;
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
    }
    /***
     * 请求服务时
     * @param request
     * @param response
     * @param chain
     * @throws IOException
     * @throws ServletException
     */
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        /**
         * httpRequest.getRequestDispatcher("/helloWorld").forward(httpRequest, response);
         服务器端转发,不改变浏览器端URL地址,常用
         httpResponse.sendRedirect(uri);
         浏览器端重定向,改变URL在浏览器地址栏
         */
        /**
         * 1,doFilter的第一个参数为ServletRequest对象。此对象给过滤器提供了对进入的信息(包括
         * 表单数据、cookie和HTTP请求头)的完全访问。第二个参数为ServletResponse,通常在简单的过 
         * 滤器中忽略此参数。最后一个参数为FilterChain,此参数用来调用servlet或JSP页。
         */
        this.request =(HttpServletRequest)request;
        /**
         * 如果处理HTTP请求,并且需要访问诸如getHeader或getCookies等在ServletRequest中
         * 无法得到的方法,就要把此request对象构造成HttpServletRequest
         */
        this.response = (HttpServletResponse) response;
        // 取得根目录所对应的绝对路径:
        String currentURL = this.request.getRequestURI();
        // 截取到当前文件名用于比较
        String targetURL = currentURL.substring(currentURL.indexOf("/", 1),
                currentURL.length());
        HttpSession session = this.request.getSession(false);
        //拦截其他请求:
        // 用户权限不够是,重定向到提示权限不够接口
        //不过滤登入的action 用户登录请求和提示用户登录请求直接过
        if (!"/login".equals(targetURL)&&!"/nopermission".equals(targetURL)&&!"/nologin".equals(targetURL)) {
                // 用户未登录,跳转到提示接口
                if (session == null || session.getAttribute(Constants.UserLogin.LOGINUSERMSG) == null) {
                    this.request.getRequestDispatcher("/user/nologin").forward(request, response);
                    return;
                }
                // 用户已登录,判断权限
                else{
                    if("/permission".equals(targetURL)) {
                        UserVO userVO = new UserVO();
                        userVO = (UserVO) session.getAttribute(Constants.UserLogin.LOGINUSERMSG);
                        //权限不够,跳转到提示接口
                        if (userVO.getLevel()!=1){
                            this.request.getRequestDispatcher("/user/nopermission").forward(request, response);
                            return;
                        }
                    }
                }
        }
        // 加入filter链继续向下执行
        chain.doFilter(request, response);
        /**
         * 调用FilterChain对象的doFilter方法。Filter接口的doFilter方法取一个FilterChain对象作   为它
         * 的一个参数。在调用此对象的doFilter方法时,激活下一个相关的过滤器。如果没有另
         * 一个过滤器与servlet或JSP页面关联,则servlet或JSP页面被激活。
         */
    }
    /***
     * 服务重启之后
     */
    @Override
    public void destroy() {
        this.request.getSession(false).setAttribute(Constants.UserLogin.LOGINUSERMSG,null);
    }
}

web.xml

<filter>
    <filter-name>permissionFilter</filter-name>
    <filter-class>com.common.PermissionFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>permissionFilter</filter-name>
    <url-pattern>/*</url-pattern>
    <dispatcher>REQUEST</dispatcher> <!-- 没有配置dispatcher就是默认request方式的 -->
    <dispatcher>FORWARD</dispatcher>
    <dispatcher>ERROR</dispatcher>
    <dispatcher>INCLUDE</dispatcher>
</filter-mapping>


相关文章
|
数据安全/隐私保护
Shiro权限管理的过滤器解释
Shiro权限管理的过滤器解释
|
4月前
|
JSON 安全 Java
如何使用filter进行权限验证?
如何使用filter进行权限验证?
81 0
|
6月前
|
安全 Java 关系型数据库
实现权限控制的方法
实现权限控制的方法
|
Java 开发者
使用filter-mapping控制多个Filter的执行顺序| 学习笔记
快速学习使用filter-mapping控制多个Filter的执行顺序。
256 0
使用filter-mapping控制多个Filter的执行顺序| 学习笔记
|
前端开发 Java 数据安全/隐私保护
用servlet和过滤器实现简单的权限管理和敏感词过滤功能
用servlet和过滤器实现简单的权限管理和敏感词过滤功能
用servlet和过滤器实现简单的权限管理和敏感词过滤功能
|
安全 前端开发 Java
权限控制之开启动态权限注解支持|学习笔记
快速学习权限控制之开启动态权限注解支持
权限控制之开启动态权限注解支持|学习笔记
|
安全 Java 数据安全/隐私保护
Spring Security-内置访问控制方法介绍和角色权限判断
Spring Security-内置访问控制方法介绍和角色权限判断
Spring Security-内置访问控制方法介绍和角色权限判断
|
XML 数据格式
javaweb Filter实现权限拦截
javaweb Filter实现权限拦截
|
存储 缓存 安全
还在亲手写Filter进行权限校验?尝试一下Shiro吧
还在亲手写Filter进行权限校验?尝试一下Shiro吧
118 0
还在亲手写Filter进行权限校验?尝试一下Shiro吧