`

用于检测用户是否登陆的过滤器

阅读更多

import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.util.List;
import java.util.ArrayList;
import java.util.StringTokenizer;
import java.io.IOException;

/**
 * 用于检测用户是否登陆的过滤器,如果未登录,则重定向到指的登录页面
 * <p>
 * 配置参数
 * <p>
 * checkSessionKey 需检查的在 Session 中保存的关键字<br/> redirectURL
 * 如果用户未登录,则重定向到指定的页面,URL不包括 ContextPath<br/> notCheckURLList
 * 不做检查的URL列表,以分号分开,并且 URL 中不包括 ContextPath<br/>
 */
public class RequestDumperFilter implements Filter {
 protected FilterConfig filterConfig = null;

 private String redirectURL = null;

 private List notCheckURLList = new ArrayList();

 private String sessionKey = null;

 public void doFilter(ServletRequest servletRequest,
   ServletResponse servletResponse, FilterChain filterChain)
   throws IOException, ServletException {
  HttpServletRequest request = (HttpServletRequest) servletRequest;
  HttpServletResponse response = (HttpServletResponse) servletResponse;

  HttpSession session = request.getSession();
  if (sessionKey == null) {
   filterChain.doFilter(request, response);
   return;
  }
  if ((!checkRequestURIIntNotFilterList(request))
    && session.getAttribute(sessionKey) == null) {
   response.sendRedirect(request.getContextPath() + redirectURL);
   return;
  }
  filterChain.doFilter(servletRequest, servletResponse);
 }

 public void destroy() {
  notCheckURLList.clear();
 }

 private boolean checkRequestURIIntNotFilterList(HttpServletRequest request) {
  String uri = request.getServletPath()
    + (request.getPathInfo() == null ? "" : request.getPathInfo());
  for(int i=0;i<notCheckURLList.size();i++){
   if(uri.equalsIgnoreCase((String)notCheckURLList.get(i)))
    return true;
  }
  return false;
 }

 public void init(FilterConfig filterConfig) throws ServletException {
  this.filterConfig = filterConfig;
  redirectURL = filterConfig.getInitParameter("redirectURL");
  sessionKey = filterConfig.getInitParameter("checkSessionKey");

  String notCheckURLListStr = filterConfig
    .getInitParameter("notCheckURLList");

  if (notCheckURLListStr != null) {
   StringTokenizer st = new StringTokenizer(notCheckURLListStr, ";");
   notCheckURLList.clear();
   while (st.hasMoreTokens()) {
    notCheckURLList.add(st.nextToken());
   }
  }
 }
}

分享到:
评论

相关推荐

    java 过滤器(附代码)

    这个过滤器的作用是检测用户是否已登陆,如果用户未登陆,将其重定向到登陆页面。实现这个过滤器的关键是使用HttpSession对象来存储用户的登陆信息。 在这个过滤器中,我们使用了Java Servlet API来实现filter接口...

    过滤器进行登录操作

    在Java Web开发中,过滤器(Filter)是一个强大的工具,常用于实现各种需求,如登录操作的处理。本文将深入探讨如何使用过滤器进行登录操作,以及这一过程中的相关知识点。 首先,我们要理解过滤器的基本概念。在...

    jsp+servlet登录验证过滤器

    如果过滤器检测到当前请求没有有效的session,那么可以判断用户未登录。 9. **安全考虑**:在实际应用中,需要考虑安全性问题,例如使用加密存储密码、防止SQL注入、XSS攻击等。 10. **最佳实践**:为了保持代码的...

    java中五种常用的过滤器

    二、检测用户是否登陆的过滤器 `CheckLoginFilter`用于验证用户是否已经登录。如果用户未登录,它会将请求重定向到登录页面。这个过滤器可以配置多个参数,如检查的session关键字、重定向URL以及不需要检查的URL列表...

    struts过滤器

    二、检测用户是否登陆的过滤器 `CheckLoginFilter`是一个用于验证用户是否已登录的过滤器。如果用户未登录,它将重定向到登录页面。该过滤器可以通过配置参数来定制,如`checkSessionKey`(检查的会话关键字)、`...

    四个有用的缓存,登陆字符编码,资源保护_过虑器

    用户登录检测过滤器用于检查用户是否已经登录,通常在用户尝试访问需要权限的页面时使用。过滤器会在每个请求之前检查请求的会话(Session)或者Cookie中是否存在有效的用户信息。如果用户未登录或会话超时,过滤器...

    WPE过登陆器辅助工具

    【WPE过登陆器辅助工具】是一款在游戏或者网络应用中常常被使用的工具,主要用于解决登录过程中的某些问题或者提供额外的功能。WPE全称Windows Packet Editor,它是一款网络封包截取和修改的工具,允许用户查看、...

    jsp+servlet的登陆注册

    本项目聚焦于“jsp+servlet的登陆注册”功能,涉及了用户登录、注册、页面自动跳转、登录登出计数、IP封禁以及过滤器和监听器的使用,这些都是构建安全、高效Web应用的核心知识点。 1. **登录注册**:这是任何Web...

    自己制作登陆器(源码)

    在IT领域,登陆器通常是用于应用程序或网站的客户端组件,它负责用户的身份验证,确保只有合法的用户可以访问特定资源。本主题涉及的是如何自制登陆器的源码,允许你自定义账号和密码,以实现安全的用户登录功能。 ...

    java_web 用户只能在一处登陆源码

    之后,每次请求时,客户端都会携带这个Session ID,服务器根据ID找到对应的Session,判断用户是否已登录。 2. **会话劫持与Session失效**: 为了防止用户在多处登录,需要检测并处理Session的会话劫持。一旦检测到...

    破天一剑私服 登陆器E语言源码

    3. **外挂作坊4.0.ec**:可能是一个反外挂工具,用于检测和阻止可能导致不公平游戏行为的第三方程序。 4. **取MD5.exe**:这是一个用于计算MD5值的可执行文件,MD5常用于密码存储的安全加密,这里可能是用于验证用户...

    风之恋1.04H生成器

    4. **安全与反作弊**:生成器在设计时需要考虑如何防止作弊行为,可能采用的技术包括但不限于:验证码系统、IP和MAC地址绑定、数据包检测和过滤等。 5. **部署与更新**:生成器生成的登陆器应具备便捷的部署方式,...

    java中filter的用法

    二、检测用户是否登陆的过滤器 在这个例子中,我们实现了一个名为 CheckLoginFilter 的 Filter,该 Filter 的作用是检测用户是否登陆。如果用户未登录,则重定向到指定的登录页面。其实现代码如下: ```java ...

    授权码模式的单点登陆1

    7. **LoginInterceptor**:这是一个拦截器,用于检测用户是否已登录。在用户访问商品详情或创建订单等需要登录的操作时,LoginInterceptor会检查Session中是否存在登录信息。 8. **OAuth 2.0**:OAuth 2.0是一个...

    单点登陆(SSO)案例(三)

    例如,用户首次访问受保护的页面时,`test.jsp`可能负责检测用户是否已登录,如果没有,则重定向到CAS的登录页面。 3. `WEB-INF`:这是Java Web应用的标准目录结构,通常包含应用的类文件、配置文件等。在SSO场景下...

    2-8 Shiro和JWT技术 - EMOS小程序1

    也就是说,我们写用户登陆模块的时候,用户登陆成功之后,要调用Shiro保存登陆凭证。然后查询用户的角色和权限,让Shiro存储起来。将来不管哪个方法需要登陆访问,或者拥有特定的角色跟权限才能访问,我们在方法前...

    structs2拦截器做的阻止未登录的用户访问

    在Structs2中,拦截器是基于AOP(面向切面编程)理念实现的,它们可以看作是控制器方法执行前后的过滤器。通过定义和配置拦截器,我们可以拦截并处理HTTP请求,决定是否允许请求继续进行,或者返回错误信息、重定向...

    TippingPoint IPS 配置手册(中文版V1.02)

    - **过滤器查询**:包括单个过滤器和组过滤器的查询,用于定位特定的过滤规则。 - **过滤器动作配置**:定义过滤器在检测到特定事件时应采取的动作,如报警、阻断、重定向等。 - **分类过滤器配置**:基于预定义的...

    管理员登录

    这对于管理员登录系统来说,可以用于检测用户的活跃状态或者实施安全控制。 其次,Servlet是Java Web应用程序的主要组成部分,它是一个Java类,用于扩展服务器的功能。Servlet接收来自客户端(如浏览器)的请求,并...

Global site tag (gtag.js) - Google Analytics