`

使用过滤器来处理Session超时和权限管理

阅读更多
我们经常会碰到这样的情况,当我们有事情离开了一会,等再回来继续我们在网页中的操作时,会出现session超时的错误,然后跟上一堆的错误,让用户感觉很不爽,像这种情况如果能在一个错误页面给个Session超时的提示就会比较友好些,再一种情况,当一个系统中的用户角色有多个,有些页面对于一些级别低的用户来说是没有权限观看的,可能在页面上能根据不同的权限屏蔽了一些链接让低级别的用户无法进入,但是这只能让低级别的用户看不见高级操作的链接,假如用户知道链接的地址直接在地址栏中输入链接,岂不是也可以进入系统啊,要解决这两个问题就得在页面中做判断了。

If(session == null) {
       //如果是超时则跳转到登陆页面重新登陆
}

If(checkAuthority() == false) {
       //如果权限不足则跳转到错误页面给个提示
}

每个.jsp页面中加上以上的判断貌似能够解决问题,然而一个系统往往有成百上千的jsp页面,倘若每个页面都这样加岂不是很费事,而且如果将来的权限判断发生变化,将要维护所有的jsp这样的工作量是很大的,灵活性很差,要是在进入这些jsp之前必须统一经过一个地方,在这个地方来做判断貌似要好一下,我们使用了过滤器来解决了这个问题



 

新建一个过滤器命名为:FilterDemo,该类继承自:javax.servlet.Filter

public class FilterDemo implements Filter{
    public void destroy() {}
    public void doFilter(ServletRequest sreq, ServletResponse response, FilterChain filterChain) throws IOException, ServletException {
       HttpServletRequest request=(HttpServletRequest)sreq;
       HttpSession session = request.getSession(false);
       if(session == null) {
           //如果是session超时,在此处做处理
       }
       if(request.getRequestURI().endsWith("download.do")) {
           //此处可以针对不同的请求根据用户是否具有权限来做处理
       }
       request.getRequestDispatcher("/Error.jsp").forward(request,response);
    }
    public void init(FilterConfig filterConfig)throws ServletException {}
}

然后将新建的Filter添加到web.xml中,部署Filter需要添加两部分:

1.filter元素
filter元素位于部署描述符文件(web.xml)的前部,所有filter-mapping、servlet或servlet-mapping元素之前。
<filter>
       <filter-name>SessionFilter</filter-name>
       <filter-class>myPackage.FilterDemo</filter-class>
</filter>

2.filter-mapping元素
filter-mapping元素位于web.xml文件中filter元素之后serlvet元素之前
<filter-mapping>
       <filter-name>SessionFilter</filter-name>
       <url-pattern>*.do</url-pattern>
</filter-mapping>

以上内容表示所以的请求中以.do结尾的都有首先通过我们这里指定的过滤器:
新建一个Servlet来测试:
public class DownLoadDemo extends HttpServlet {
    private static final long serialVersionUID = 1L;
     public DownLoadDemo() {
        super();
    }
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
       this.doPost(request, response);
    }
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
       request.getRequestDispatcher("/DownLoadExcel.jsp").forward(request, response);

    }
}

在web.xml中部署好该servlet

<servlet>
       <servlet-name>DownLoadDemo</servlet-name>
       <servlet-class>com.sinosoft.base.sessiondemo.DownLoadDemo</servlet-class>
</servlet>
    <servlet-mapping>
       <servlet-name>DownLoadDemo</servlet-name>
       <url-pattern>/download</url-pattern>
    </servlet-mapping>

新建jsp来测试

Index.jsp
<body>
    <form action="download.do">
    <h1>This is a Demo Application</h1>
    <a href = 'DownLoadExcel.jsp'>导出Excel</a>
    <input type='submit'>
    </form>
</body>

为了便于对比我们使用了一个是超链接的形式,一个是通过servlet来跳转,当点击提交按钮时会被拦截,而直接点击超链接就不会被拦截,因为我们的Filter中配置的是拦截.do形式的,如果要拦截jsp也可以使用<url-pattern>DownLoadExcel.jsp </url-pattern>

再添加一个错误页面Error.jsp

<body>

<h1>对不起,你没有权限</h1>

</body>

分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    J简单的springmvc包括拦截、session设置,超时跳转

    当Session超时时,通常需要将用户重定向到登录页面,提示他们重新登录。这可以通过监听器、过滤器或者在拦截器中实现。例如,在拦截器的`preHandle()`方法中,检查当前请求的Session是否有效,如果发现Session已经...

    过滤器进行登录操作

    我们可以设置多个过滤器来处理不同的登录需求,比如身份验证、权限检查等。 2. **身份验证**:在用户尝试访问受保护的页面时,过滤器可以检查请求中是否携带了有效的登录信息,例如session中的用户对象。如果没有,...

    ajax提交session超时跳转页面使用全局的方法来处理

    首先,我们来看在过滤器中处理Session超时的代码片段。过滤器是Servlet技术中的一种机制,可以在请求到达目标Servlet之前或之后对请求和响应进行预处理和后处理。在这个例子中,我们定义了一个`doFilter`方法,它是...

    过滤器和监听器的使用

    过滤器主要负责对HTTP请求和响应进行拦截和处理,而监听器则用来监听和响应特定的事件。 过滤器在Servlet规范中定义,是一种基于拦截器模式的机制,它可以对请求和响应进行预处理和后处理。例如,我们可以通过过滤...

    shiro+redis做session管理

    同时,设置`sessionManager`的`globalSessionTimeout`属性来定义Session超时时间。 4. **配置SessionValidationScheduler**:为了定期检查Session的有效性,需要开启Shiro的`SessionValidationScheduler`。可以在`...

    过滤器和监听器的使用步骤

    过滤器和监听器是Java Web开发中的强大工具,它们可以帮助我们实现诸如认证、授权、日志记录、数据转换等多种功能,同时也能更好地管理和监控应用程序的状态。了解并熟练掌握它们的使用,对于提升Web应用的灵活性...

    Servlet过滤器与监听器.doc

    总的来说,Servlet过滤器和监听器是Servlet技术中强大的工具,它们扩展了Web应用程序的能力,使开发者能更精细地控制请求处理流程和响应生成,以及实现无侵入式的事件处理。通过合理利用这两个组件,开发者可以构建...

    servlet过滤器1

    1. **用户认证与授权管理**:过滤器可以拦截请求,检查用户的权限。例如,当用户尝试访问特定资源时,过滤器会检查用户的session信息,如果用户具备访问权限,就放行请求,否则重定向至错误页面或登录页面。 2. **...

    SpringBoot整合Shiro,实现从数据库加载权限、权限的动态更新、Session共享

    SpringBoot与Apache Shiro的整合是企业级应用中常见的安全框架集成方式,它能帮助开发者高效地处理身份验证、授权、会话管理和安全管理等问题。在本项目中,我们将深入探讨如何利用SpringBoot与Shiro结合,实现从...

    java权限管理系统

    Apache Shiro是一个强大且易用的Java安全框架,处理认证(身份验证)、授权(权限授权)以及会话管理和加密等功能。在这个基于Shiro的权限管理系统中,主要涉及以下几个关键知识点: 1. **认证**:认证是确定用户...

    springboot shiro 权限管理项目

    例如,我们可以设置`/login`路由使用`authc`过滤器进行登录验证,`/logout`路由使用`logout`过滤器实现用户登出,而其他受保护的路由则使用`perms`或`roles`过滤器进行权限检查。 在实际的业务逻辑中,我们需要创建...

    SpringBoot+Shiro权限管理系统脚手架.rar

    2. **Authorization(授权)**:Shiro通过`Permission`和`Role`的概念来管理用户的访问权限。你可以为不同的角色分配不同的权限,并在访问控制器中使用Shiro的注解或过滤器来限制只有拥有特定权限的用户才能访问某些...

    bboss 安全认证过滤器功能介绍

    BBoss安全认证过滤器是Java Web开发中一种用于实现用户身份验证和权限控制的重要组件。在Web应用程序中,过滤器(Filter)是Servlet规范的一部分,它允许开发者在请求到达目标Servlet或JSP之前进行预处理,以及在...

    java过滤器

    当涉及到多个页面需要对用户权限进行控制时,使用过滤器可以极大地简化代码,提高代码复用性和系统效率。 一、Java过滤器基础 Java过滤器是Servlet API的一部分,允许开发者在请求被Servlet处理之前或之后进行拦截...

    session编程(包括禁用cookie的情况)

    Spring提供了`AbstractSessionManagementFilter`类,可以自定义过滤器来处理Session ID的传递。例如,可以创建一个继承自`AbstractSessionAuthenticationStrategy`的类,实现无Cookie情况下的Session管理策略。 ...

    SpringBoot+Shiro权限管理系统脚手架.zip

    - 过滤器链设置:Shiro的过滤器链是实现权限控制的关键,我们需要根据需求配置不同的过滤器,如 anon(匿名访问)、authc(认证过滤器)等,以控制不同URL的访问权限。 3. **权限管理脚手架的构建** - 用户模块:...

    webix+springmvc session超时跳转登录页面

    - 在Spring MVC中,可以配置拦截器或者过滤器来检查每个请求的会话状态。如果会话已经超时,服务器可以返回一个特定的HTTP状态码或在响应体中携带信息告知客户端会话已过期。 - 通过响应头或响应体传递的信息,...

    Springboot + shiro权限管理

    - **授权**:Shiro 使用权限字符串(如 "admin:*")来控制用户对资源的访问。可以在 Controller 方法上添加 @RequiresPermissions 注解,或者通过 Filter 链进行全局控制。 **5. 会话管理** Shiro 提供了会话管理...

    动态添加权限管理

    Shiro提供了一套完整的身份验证(Authentication)、授权(Authorization)、会话(Session)管理和加密(Cryptography)工具。它的优势在于简洁的API和易于集成到现有应用中。 1. **身份验证**:Shiro能处理用户...

    管理系统系列--SpringBoot+Shiro权限管理系统脚手架.zip

    Shiro提供了一套完整的安全控制体系,包括用户认证(验证用户身份)、授权(控制用户访问权限)、会话管理(如session共享)和密码加密。在SpringBoot+Shiro的系统中,Shiro主要负责用户的登录验证、角色与权限的...

Global site tag (gtag.js) - Google Analytics