Spring MVC过滤器-登录过滤的代码实现

 更新时间:2017年01月06日 17:19:35   作者:geloin  
本篇文章主要介绍了Spring MVC过滤器-登录过滤,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧。

一个非常简单的登录权限拦截器,具体代码如下:

以下代码是继承OncePerRequestFilter实现登录过滤的代码:

/** 
 * 
 * @author geloin 
 * @date 2012-4-10 下午2:37:38 
 */ 
package com.test.spring.filter; 
 
import java.io.IOException; 
import java.io.PrintWriter; 
 
import javax.servlet.FilterChain; 
import javax.servlet.ServletException; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
 
import org.springframework.web.filter.OncePerRequestFilter; 
 
/** 
 * 登录过滤 
 * 
 * @author geloin 
 * @date 2012-4-10 下午2:37:38 
 */ 
public class SessionFilter extends OncePerRequestFilter { 
 
  /* 
   * (non-Javadoc) 
   * 
   * @see 
   * org.springframework.web.filter.OncePerRequestFilter#doFilterInternal( 
   * javax.servlet.http.HttpServletRequest, 
   * javax.servlet.http.HttpServletResponse, javax.servlet.FilterChain) 
   */ 
  @Override 
  protected void doFilterInternal(HttpServletRequest request, 
      HttpServletResponse response, FilterChain filterChain) 
      throws ServletException, IOException { 
 
    // 不过滤的uri 
    String[] notFilter = new String[] { "login.html", "index.html" }; 
 
    // 请求的uri 
    String uri = request.getRequestURI(); 
 
    // uri中包含background时才进行过滤 
    if (uri.indexOf("background") != -1) { 
      // 是否过滤 
      boolean doFilter = true; 
      for (String s : notFilter) { 
        if (uri.indexOf(s) != -1) { 
          // 如果uri中包含不过滤的uri,则不进行过滤 
          doFilter = false; 
          break; 
        } 
      } 
      if (doFilter) { 
        // 执行过滤 
        // 从session中获取登录者实体 
        Object obj = request.getSession().getAttribute("loginedUser"); 
        if (null == obj) { 
          // 如果session中不存在登录者实体,则弹出框提示重新登录 
          // 设置request和response的字符集,防止乱码 
          request.setCharacterEncoding("UTF-8"); 
          response.setCharacterEncoding("UTF-8"); 
          PrintWriter out = response.getWriter(); 
          String loginPage = "...."; 
          StringBuilder builder = new StringBuilder(); 
          builder.append("<script type=\"text/javascript\">"); 
          builder.append("alert('网页过期,请重新登录!');"); 
          builder.append("window.top.location.href='"); 
          builder.append(loginPage); 
          builder.append("';"); 
          builder.append("</script>"); 
          out.print(builder.toString()); 
        } else { 
          // 如果session中存在登录者实体,则继续 
          filterChain.doFilter(request, response); 
        } 
      } else { 
        // 如果不执行过滤,则继续 
        filterChain.doFilter(request, response); 
      } 
    } else { 
      // 如果uri中不包含background,则继续 
      filterChain.doFilter(request, response); 
    } 
  } 
 
} 

写完过滤器后,需要在web.xml中进行配置:

<filter> 
  <filter-name>sessionFilter</filter-name> 
  <filter-class>com.test.spring.filter.SessionFilter</filter-class> 
</filter> 
<filter-mapping> 
  <filter-name>sessionFilter</filter-name> 
  <url-pattern>/*</url-pattern> 
</filter-mapping> 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Mybatis中的延迟加载详细解读

    Mybatis中的延迟加载详细解读

    这篇文章主要介绍了Mybatis中的延迟加载详细解读,Mybatis中延迟加载又称为懒加载,是指在进行关联查询时,按照设置延迟规则推迟对关联对象的select查询,延迟加载可以有效的减少数据库的压力,需要的朋友可以参考下
    2023-10-10
  • Mybatis如何实现InsertOrUpdate功能

    Mybatis如何实现InsertOrUpdate功能

    这篇文章主要介绍了Mybatis如何实现InsertOrUpdate功能,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-05-05
  • 浅谈Java并发中的内存模型

    浅谈Java并发中的内存模型

    这篇文章主要介绍了Java并发中的内存模型,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-05-05
  • springboot通过spel结合aop实现动态传参的案例

    springboot通过spel结合aop实现动态传参的案例

    SpEl 是Spring框架中的一个利器,Spring通过SpEl能在运行时构建复杂表达式、存取对象属性、对象方法调用等,今天通过本文给大家介绍springboot spel结合aop实现动态传参,需要的朋友可以参考下
    2022-07-07
  • Java对象在JVM中的生命周期详解

    Java对象在JVM中的生命周期详解

    这篇文章主要介绍了Java对象在JVM中的生命周期详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-05-05
  • 基于JWT的spring boot权限验证技术实现教程

    基于JWT的spring boot权限验证技术实现教程

    这篇文章主要给大家介绍了关于基于JWT的spring boot权限验证技术实现的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • Java中notify是顺序唤醒还是随机唤醒的

    Java中notify是顺序唤醒还是随机唤醒的

    这篇文章主要介绍了Java中notify是顺序唤醒还是随机唤醒的,有很多人会认为 notify 是随机唤醒的,但它真的是随机唤醒的吗?带着疑问一起进入文章了解具体的内容吧
    2022-05-05
  • Java集合中的LinkedHashSet源码解读

    Java集合中的LinkedHashSet源码解读

    这篇文章主要介绍了Java集合中的LinkedHashSet源码解读,在LinkedHashMap中,双向链表的遍历顺序通过构造方法指定,如果没有指定,则使用默认顺序为插入顺序,即accessOrder=false,需要的朋友可以参考下
    2023-12-12
  • Java如何设置PDF文档背景色详解

    Java如何设置PDF文档背景色详解

    这篇文章主要介绍了Java如何设置PDF文档背景色详解,一般生成的PDF文档默认的文档底色为白色,我们可以通过一定方法来更改文档的背景色,以达到文档美化以及保护双眼的作用。 以下内容提供了Java编程来设置PDF背景色的方法,需要的朋友可以参考下
    2019-07-07
  • Java并发实例之CyclicBarrier的使用

    Java并发实例之CyclicBarrier的使用

    这篇文章主要介绍了Java并发实例之CyclicBarrier的使用,涉及CyclicBarrier的介绍,以及相关的并发实例,具有一定参考价值,需要的朋友可以了解下。
    2017-11-11

最新评论