当前位置: 首页 > 编程笔记 >

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

秦景福
2023-03-14
本文向大家介绍Spring MVC过滤器-登录过滤的代码实现,包括了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> 

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

 类似资料:
  • character-encoding-filter 是 Java Web 乱码过滤器。 web.xml <filter>    <filter-name>character-encoding-filter</filter-name>    <filter-class>com.github.zhanhb.filter.CharacterEncodingFilter</filter-class>   

  • 本文向大家介绍Java实现的文件过滤代码分享(按后辍过滤),包括了Java实现的文件过滤代码分享(按后辍过滤)的使用技巧和注意事项,需要的朋友参考一下 好久没有写代码了,也好久没有更新我的博客了,昨晚写了这个过滤文件名的程序,遂发之~

  • 问题内容: 我正在使用日志记录()记录消息。 在1个单一模块中,我正在调试级别记录消息; 其中一些调试消息来自于其他消息; 我希望能够基于它们是来自a还是来自b来启用/禁用日志记录; 我猜想我必须使用日志记录的过滤机制。 有人可以告诉我下面的代码如何被执行我想要的工作吗? 如果将这个简单的示例扩展到更多模块和每个模块更多的功能,我会担心很多记录器; 是否可以将每个模块的记录器数量限制为1个?请注意

  • gRPC-JSON转码配置概述。 gRPC-JSON转码配置 过滤器配置所需要描述符文件以及要转码的gRPC服务列表。 { "name": "grpc_json_transcoder", "config": { "proto_descriptor": "proto.pb", "services": ["grpc.service.Service"], "print_o

  • gRPC 架构概述 v1 API 参考 v2 API 参考 这是一个过滤器,它允许RESTful JSON API客户端通过HTTP向Envoy发送请求并代理到gRPC服务。根据自定义选项HTTP映射到gRPC服务。 返回 上一级

  • 过滤器是 控制器动作 执行之前或之后执行的对象。 例如访问控制过滤器可在动作执行之前来控制特殊终端用户是否有权限执行动作, 内容压缩过滤器可在动作执行之后发给终端用户之前压缩响应内容。 过滤器可包含预过滤(过滤逻辑在动作之前)或后过滤(过滤逻辑在动作之后), 也可同时包含两者。 使用过滤器 过滤器本质上是一类特殊的 行为, 所以使用过滤器和 使用行为一样。 可以在控制器类中覆盖它的 behavio