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);
}
}
<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>

上面两个是过滤器和web.xml配置代码。

java filter 实现权限控制的更多相关文章

  1. Java 訪问权限控制:你真的了解 protected keyword吗?

    摘要: 在一个类的内部,其成员(包含成员变量和成员方法)是否能被其它类所訪问,取决于该成员的修饰词:而一个类是否能被其它类所訪问,取决于该类的修饰词.Java的类成员訪问权限修饰词有四类:privat ...

  2. Java基础—访问权限控制

    Java中访问权限控制的作用: 为了使用户不要触碰那些他们不该触碰的部分,这些部分对于类内部的操作时必要的,但是它并不属于客户端程序员所需接口的一部分. 为了让类库设计者可用更改类的内部工作方式,而不 ...

  3. zookeeper java调用及权限控制

    import java.io.IOException; import java.security.NoSuchAlgorithmException; import java.util.ArrayLis ...

  4. 【Java_基础】Java的访问权限控制

    1.类成员的访问权限控制 Java中类成员的访问权限分为四类:private,无(默认情况下),protected和public.其权限控制如下表所示: 修饰词 本类 同一个包的类 继承类 其他类 p ...

  5. JAVA笔记 -- 访问权限控制

    访问权限控制 没有权限控制的时候,由于所有的接口都是可以访问的.当一个类库部分代码,发现有更好的方法解决的时候,可能其他接口会发生改动.这会导致另一个地方的引用该类库的程序发生崩溃.为了解决这种问题, ...

  6. Java丨角色权限控制——数据库设计

    相信各位读者对于角色权限管理这个需求并不陌生.那么是怎么实现的呢?今天小编来说道说道! 1.首先我们来进行数据库的设计,如何设计数据库是实现权限控制的关键: 1)用户表: id:主键.自增.int n ...

  7. Java使用Filter用户权限控制

    package com.mvc.test; import javax.servlet.ServletException; import javax.servlet.annotation.WebServ ...

  8. java 的访问权限控制

    package test06; public class PermissionModel { private int age; public String name; public int getAg ...

  9. JAVA访问权限控制[zhuan]

    Java的访问权限控制修饰符,从最大权限到最小权限依次是:public.protected.包访问权限(默认,没有关键字)和private.对于类的访问权限只能是:public和包访问权限(但内部类可 ...

随机推荐

  1. Observable观察者模式的使用

    今天我们公司封装的类中没有加上Observable观察者模式,但是很多地方需要用到Observable观察者模式 接下来就向大家介绍一下我的使用吧! 在介绍之前我们写了一个方法 public clas ...

  2. 《从零开始学Swift》学习笔记(Day 17)——Swift中数组集合

    原创文章,欢迎转载.转载请注明:关东升的博客 数组(Array)是一串有序的由相同类型元素构成的集合.数组中的集合元素是有序的,可以重复出现. 声明一个Array类型的时候可以使用下面的语句之一. v ...

  3. JS将秒转换为 天

    function SecondToDate(msd) {             var time =msd             if (null != time && " ...

  4. MySQL多实例启动停止

    原文地址:http://wolfword.blog.51cto.com/4892126/1241304/ 说明:本实验以MySQL 5.1为例来实验. 1.安装MySQL 5.1 yum instal ...

  5. js的简单的逻辑算法题

    比如题目:寻找1~1000之内,所有能被5整除.或者能被6整除的数字 1 for(var i = 1 ; i <= 1000 ; i++){ 2  if(i % 5 == 0 || i % 6 ...

  6. python系列九:python3迭代器和生成器

    #!/usr/bin/python import sys '''迭代器是一个可以记住遍历的位置的对象.迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退.迭代器有 ...

  7. 解决IIS部署网站引用woff/woff2/svg字体报404错误

    一.问题 在IIS上部署网站,网页引用woff字体时,浏览器报“找不到woff.woff2字体”.“404”错误,不仅预设的字体加载不出来,还影响网页加载速度. 二.原因 IIS默认设置情况下不识别. ...

  8. python 元类metaclass

    文章转自:http://www.cnblogs.com/linhaifeng/articles/8029564.html 一 知识储备 exec:三个参数 参数一:字符串形式的命令 参数二:全局作用域 ...

  9. win7安装composer

    安装前请务必确保已经正确安装了 PHP.打开命令行窗口并执行 php -v 查看是否正确输出版本号. 开始安装前需要把open_ssl扩展打开 打开命令行并依次执行下列命令安装最新版本的 Compos ...

  10. Scilab 的画图函数(2)

    一幅图是由很多元素组成的. 包含图标题.x轴标签.y轴标签,刻度线等.图1给出了各个元素的一个示意图. 这些全部的元素在scilab中都是能够用代码控制的. 标题 上个笔记上介绍了用xtitle()函 ...