`

如何利用过滤器实现权限验证功能?

阅读更多

. 过滤的实现调用链所有过滤器都服从调用的过滤器链,并通过定义明确的接口得到执行。

一个执行过滤器的 Java 类必须执行这一 javax.servlet.Filter 接口。这一接口含有三个过滤器必须执行的方法: doFilter(ServletRequest, ServletResponse, FilterChain):这是一个完成过滤行为的方法。这同样是上游过滤器调用的方法。引入的FilterChain对象提供了后续过滤器所要调用的信息。

init(FilterConfig):这是一个容器所调用的初始化方法。它保证了在第一次doFilter()调用前由容器调用。您能获取在 web.xml 文件中指定的初始化参数。

 destroy():容器在破坏过滤器实例前,doFilter()中的所有活动都被该实例终止后,调用该方法。嵌套调用在 doFilter() 方法执行中发生。除非您建立一个过滤器明确阻止所有后续处理(通过其它过滤器及资源处理器),否则过滤器一定会在 doFilter 方法中作以下的调用: ...

 

如果没有对页面进行权限控制,用户只要输入URL就能进入任何页面。

     下面就演示一下最基本的使用Fiter来控制页面的权限。

     1.写一个FILTER,用来判断用户是否有权限进入指定页面。

java 代码
  1. import java.io.IOException;   
  2.   
  3. import javax.servlet.Filter;   
  4. import javax.servlet.FilterChain;   
  5. import javax.servlet.FilterConfig;   
  6. import javax.servlet.ServletException;   
  7. import javax.servlet.ServletRequest;   
  8. import javax.servlet.ServletResponse;   
  9. import javax.servlet.http.HttpServlet;   
  10. import javax.servlet.http.HttpServletRequest;   
  11. import javax.servlet.http.HttpServletResponse;   
  12. import javax.servlet.http.HttpSession;   
  13.   
  14. import org.apache.log4j.Logger;   
  15.   
  16. import com.kiral.action.UserAction;   
  17. import com.kiral.model.User;   
  18.   
  19. /*******************************************************************************  
  20.  * 在过滤器中实现权限控制类,用来检验用户是否有权限进入当前页面  
  21.  *   
  22.  * @作者:kiral  
  23.  * @日期:2006-6-24  
  24.  * @版本: 1.0  
  25.  ******************************************************************************/  
  26. public class FilterServlet extends HttpServlet implements Filter {   
  27.     private static final long serialVersionUID = 5162189625393315379L;   
  28.   
  29.     private static Logger LOG = Logger.getLogger(FilterServlet.class);   
  30.   
  31.     /**  
  32.      * 配置允许的角色  
  33.      */  
  34.     private String allowRole = null;   
  35.   
  36.     /**  
  37.      * 重定向的URL  
  38.      */  
  39.     private String redirectURl = null;   
  40.   
  41.     public void init(FilterConfig filterConfig) throws ServletException {   
  42.         // 得到允许的角色,这个参数是由web.xml里的allowRole所指定   
  43.         allowRole = filterConfig.getInitParameter("allowRole");   
  44.         // 指定要重定向的页面   
  45.         redirectURl = "/locker/index.html";   
  46.     }   
  47.   
  48.     /**  
  49.      * 在过滤器中实现权限控制  
  50.      */  
  51.     public void doFilter(ServletRequest sRequest, ServletResponse sResponse,   
  52.             FilterChain filterChain) throws IOException, ServletException {   
  53.         HttpServletRequest request = (HttpServletRequest) sRequest;   
  54.         HttpServletResponse response = (HttpServletResponse) sResponse;   
  55.         HttpSession session = request.getSession();   
  56.   
  57.         // 如果回话中的用户为空,页面重新定向到登陆页面   
  58.         if (session.getAttribute(UserAction.CURRENT_USER) == null) {   
  59.             response.sendRedirect(redirectURl);   
  60.         }   
  61.         // 会话中存在用户,则验证用户是否存在当前页面的权限   
  62.         else {   
  63.             User user = (User) session.getAttribute(UserAction.CURRENT_USER);   
  64.             try {   
  65.                 // 如果用户没有当前页的权限,页面重新定向到登陆页面   
  66.                 if ("0".equals(allowRole) || user.hasPower(allowRole)) {   
  67.                     filterChain.doFilter(sRequest, sResponse);   
  68.                 } else {   
  69.                     // 过滤器经过过滤后,过滤链继续传递请求和响应   
  70.                     response.sendRedirect(redirectURl);   
  71.                 }   
  72.             } catch (Throwable e) {   
  73.                 LOG.error("权限过滤时候出现错误", e);   
  74.                 throw new RuntimeException("权限过滤时候出现错误", e);   
  75.             }   
  76.         }   
  77.     }   
  78.   
  79.     public void destroy() {   
  80.     }   
  81.   
  82. }  

 

在web.xml中配置 要过滤的页面和能进入当前页面的角色

xml 代码
  1. <!---->  
  2.     <filter>  
  3.         <filter-name>UserAdminfilter-name>  
  4.         <!---->  
  5.         <filter-class>com.emap.web.FilterServletfilter-class>  
  6.         <!---->  
  7.         <init-param>  
  8.             <!---->  
  9.             <param-name>allowRoleparam-name>  
  10.             <param-value>1param-value>  
  11.         init-param>  
  12.     filter>  
  13.     <filter-mapping>  
  14.         <filter-name>UserAdminfilter-name>  
  15.         <url-pattern>/jsp/security/*url-pattern>  
  16.     filter-mapping>  

上面配置的意思是说,当用户进入/jsp/security文件夹下的页面的时候,程序会进入FilterServlet 里的doFilter方法里,进行权限判断。

 其他的页面权限控制:

  1.你可以在filter里判断用户是否登录,然后需要特殊权限能访问的页面,在页面里进行判断。

  2.推荐使用开源框架ACEGI来进行权限控制。

 

分享到:
评论

相关推荐

    使用过滤器实现判断用户是否登录验证.

    在Web开发中,确保用户身份的安全性...总的来说,使用过滤器实现用户登录验证是一种常见的实践,它允许我们集中管理权限控制,提高代码的可维护性。同时,通过合理的配置和扩展,可以适应不同规模和需求的Web应用程序。

    利用过滤器设置权限利用过滤器设置权限

    在Java Web开发中,过滤器经常被用来实现诸如权限验证、编码转换、日志记录等功能。 #### 二、配置过滤器 过滤器的配置通常是在`web.xml`文件中完成的。例如: ```xml &lt;filter-name&gt;access &lt;filter-class&gt;...

    Java SSH 权限验证过滤器实现

    Java SSH 权限验证过滤器实现。。。内容简单 有部分struts.xml配置信息,自己测试过。仅供参考。。。

    Asp.NetCore示例代码-权限验证-过滤器-设计模式等

    在Asp.NetCore框架中,开发人员经常遇到各种挑战,如权限验证、过滤器的使用以及设计模式的应用。本示例代码集旨在帮助开发者更好地理解和应用这些关键概念。以下是关于这些主题的详细讨论: 1. **Asp.NetCore**:...

    servlet 过滤器做的简单登陆demo

    在这个“servlet过滤器做的简单登陆demo”中,我们将探讨如何利用过滤器实现一个基础的登录验证系统。这个例子非常适合初学者理解和实践过滤器的用法。 1. **Servlet Filter原理**: Servlet过滤器遵循`Filter`...

    servlet+jsp实现过滤器 防止用户未登录访问

    在Web开发中,保护页面安全,避免用户未登录就访问敏感页面是常见的需求。使用servlet和jsp技术时,...开发者可以灵活地定义过滤器的行为,并且通过配置文件将过滤器与具体的URL模式关联起来,实现复杂的权限控制逻辑。

    过滤器实现多层权限控制

    本文将深入探讨如何利用过滤器实现多层权限控制,并结合给定的标签“源码”和“工具”,来提供一个具体的实践示例。 首先,我们需要理解过滤器在Java Web开发中的作用。在Servlet规范中,过滤器是一个实现了javax....

    .NET MVC授权过滤器验证登录

    此外,可以使用依赖注入(Dependency Injection)将用户服务或其他业务逻辑引入自定义授权过滤器,以便进行更复杂的授权检查,如角色或权限验证。 总的来说,.NET MVC的授权过滤器是实现用户登录验证的关键组件。...

    权限管理(过滤器粗粒度无侵入拦截方式)

    在权限管理的场景下,过滤器常用于实现登录验证、角色检查等功能。粗粒度的权限管理意味着我们并不关心每一个细小的操作,而是对一组相关的资源或者操作进行统一的权限判断。这种方式简化了代码,提高了效率,同时也...

    过滤器实现鉴权

    "过滤器实现鉴权"这个主题涉及到如何使用过滤器来实现对用户访问特定目录的权限控制,而无需依赖数据库。这种方式常用于小型项目或者快速原型开发,减少了数据库设计和连接的复杂性。 1. **过滤器基础** - 过滤器...

    servlet过滤器验证用户登录

    在IT领域,特别是Java Web开发中,Servlet过滤器(Filter)是实现用户权限管理、登录状态验证等关键功能的重要机制之一。本文将深入探讨如何利用Servlet过滤器来验证用户是否已登录,以及如何配置过滤器以针对特定的...

    过滤器--控制不同权限用户访问不同文件夹代码.rar

    在IT领域,尤其是在Web开发中,过滤器(Filter)是一种常用的技术,用于处理HTTP请求和响应,实现诸如权限控制、日志记录、数据过滤等功能。本案例中的"过滤器--控制不同权限用户访问不同文件夹代码.rar"是一个针对...

    Struts权限过滤器

    在本篇文章中,我们将深入探讨Struts权限过滤器的工作原理、配置以及如何实现自定义过滤器。 Struts 2框架提供了多种内置过滤器,如`TilesFilter`、`StrutsPrepareAndExecuteFilter`等,这些过滤器帮助开发者管理...

    过滤器的部分知识

    过滤器的一个典型应用场景是进行权限控制,比如登录检查。你可以检查请求中的会话信息,如果用户未登录,则重定向到登录页面。此外,过滤器还可以用于GZIP压缩、日志记录、字符集转换等多种用途。 在实际项目中,你...

    使用过滤器完成用户登录验证

    在本主题中,我们将重点讨论如何使用过滤器来实现用户登录验证。这在保护网站资源、确保只有已登录的用户才能访问特定页面时尤其重要。 过滤器的工作原理是基于Servlet规范中的Filter接口。当一个HTTP请求到达...

    通过过滤器管理用户权限(2)

    过滤器可以用来做多种任务,包括登录验证、URL重写、字符编码转换等,而权限管理是其中的一个关键应用。 1. **Filter的基本概念** - Filter接口:它包含三个方法,`doFilter()`, `init()`, 和 `destroy()`。`...

    java web权限访问过滤器

    通过以上步骤,我们就利用Java Web的过滤器实现了基本的权限访问控制。这个机制不仅限于简单的登录验证,还可以扩展到更复杂的权限系统,如基于角色的访问控制(RBAC)或其他自定义的权限策略。记住,安全是Web应用...

    用过滤器验证

    通过使用过滤器,可以简化应用开发,并将一些通用功能(如登录验证、权限控制、编码转换等)从业务逻辑中分离出来。 #### 知识点二:过滤器的生命周期方法 过滤器具有以下三个主要方法: 1. **init(FilterConfig ...

    通过过滤器管理用户权限(1)

    在标题提到的"通过过滤器管理用户权限(1)"中,我们将主要关注如何利用过滤器实现登录验证,确保只有已登录的用户才能访问特定的受保护资源。这通常涉及到一个名为`LoginFilter`的类,正如压缩包中的`LoginFilter....

    JAVA过滤器标准代码

    2. **权限验证**:类似于`Test`过滤器的功能,可以用来进行基本的身份验证或权限检查。例如,检查用户是否登录,或者用户是否有访问特定资源的权限,这对于构建安全的Web应用非常重要。 3. **日志记录与监控**:...

Global site tag (gtag.js) - Google Analytics