`
hendryxu
  • 浏览: 123478 次
  • 来自: ...
最近访客 更多访客>>
社区版块
存档分类
最新评论

使用filter验证session用户和页面缓存问题处理

阅读更多
WEB的信息安全隐患之一:

未授权用户通过直接在IE中输入URL直接登录系统

解决办法:

通过配置filter过滤无效用户的连接请求.

WEB的信息安全隐患之二:

合法用户"注销"后,在未关闭浏览器的情况下,点击浏览器"后退"按钮,可从与本地页面缓存中读取数据,绕过了服务端filter过滤.

解决办法:

在必要的页面(包含敏感信息) 设定页面缓存限制.

也可以把上面两步组合在一个,通过同一个filter实现.具体如下:

1.配置filter(web.xml)

......

<filter>
  <filter-name>Authentication</filter-name> <!-- Authentication过滤器别名 -->
  <filter-class>com.mycompany.myweb.management.util.AuthenticationFilter</filter-class> <!-- 过滤器Authentication指向的具体类 -->
  <init-param>
   <param-name>onError</param-name> <!-- 过滤器初始化参数配置 -->
   <param-value>/Logon.do</param-value> <!-- 这里指定无效用户跳转方向 -->
  </init-param>
</filter>
<filter-mapping>
<filter-name>Authentication</filter-name>
<url-pattern>/management/*</url-pattern> <!-- management/*是要过滤的文件的位置,表示过滤management文件夹下的所内容。 -->
</filter-mapping>
<filter-mapping>
<filter-name>Authentication</filter-name>
<url-pattern>/Main.do</url-pattern> <!-- Main.do/*是要过滤的请求,表示过滤此请求指定的页面的所内容。 -->
</filter-mapping>

......

AuthenticationFilter过滤器实现类:

package com.mycompany.myweb.management.util;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.*;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import org.apache.struts.Globals;
import org.apache.struts.action.*;

public class AuthenticationFilter implements Filter {//一定要使用Filter接口
private FilterConfig filterConfig;

private String onErrorUrl;

public void init(FilterConfig config) throws ServletException {
  filterConfig = config;
  onErrorUrl = filterConfig.getInitParameter("onError");
  if (onErrorUrl == null || "".equals(onErrorUrl)) {
   onErrorUrl = "onError";
  }
}

public void doFilter(ServletRequest request, ServletResponse response,
   FilterChain next) throws IOException, ServletException {
  HttpServletRequest httpRequest = (HttpServletRequest) request;
  HttpServletResponse httpResponse = (HttpServletResponse) response;
  HttpSession httpSession = httpRequest.getSession();
/**
  * @author justin ray
  * @see 页面缓存设定
  * <br>确保浏览器不缓存页面数据
  */

httpResponse.setHeader("Cache-Control","no-cache");
  httpResponse.setHeader("Cache-Control","no-store");
  httpResponse.setDateHeader("Expires", 0);
  httpResponse.setHeader("Pragma","no-cache");

  /**
  * @author justin ray
  * @see 过滤未登录用户无效请求
  * <br>未登录用户请求跳转到/Logon.do
  */
  if (httpSession.getAttribute("ePAccountInfo") == null) {
   ActionErrors errors = new ActionErrors();
   errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("没有登录"));
   httpRequest.setAttribute(Globals.ERROR_KEY, errors);
   httpRequest.getRequestDispatcher(onErrorUrl).forward(httpRequest,
     httpResponse);
  } else
   next.doFilter(request, response);
}

public void destroy() {
}

}



其他方式,如:在一个JSP里实现用户登录验证,其他JSP页面通过include引入验证

分享到:
评论

相关推荐

    shiro的全流程demo,世界shiro在spring中认证、授权流程,自定义授权类型,分布式session、授权缓存的实现

    Apache Shiro 是一个强大且易用的 Java 安全框架,它提供了认证、授权、加密和会话管理功能,简化了开发人员处理安全问题的过程。本项目是一个基于 Spring Boot 的 Shiro 全流程示例,涵盖了从用户登录认证到权限...

    检验用户登录信息(使有Filter,最终版)

    标题中的“检验用户登录信息(使用Filter,最终版)”是指在Web开发中,通过使用Servlet Filter技术来验证用户登录状态的一种实现方式。Filter是Java Servlet API中的一部分,它允许我们在请求到达目标Servlet或JSP...

    java自学===Filter类的应用,验证用户

    在这个主题中,我们将深入探讨如何使用`Filter`进行用户验证。 一、Filter接口简介 `javax.servlet.Filter`是Java Servlet API的一部分,它定义了一个接口,用于在请求被Servlet处理之前和之后执行一些逻辑。Filter...

    在Java的web编程中关于session技术的使用详解

    为避免Session滥用,应合理设计Session的使用,比如使用Session监听器来监听Session的创建和销毁,或者使用Filter进行Session的验证和清理。 8. **会话固定攻击** Session技术的一个安全隐患是会话固定攻击,攻击...

    SSM项目集成shiro搭建session共享

    在实际集成过程中,我们需要配置Shiro的 Realm(认证和授权),SessionManager(管理session),CacheManager(使用Redis作为缓存),以及Filter Chain定义,确保请求经过正确的过滤器链。同时,需要在每个节点...

    shiro redis session共享

    标题“shiro redis session共享”涉及的是Web应用中关于用户会话管理的技术,主要集中在Apache Shiro框架和Redis缓存系统上。Apache Shiro是一款强大的Java安全框架,它提供了身份验证、授权、加密和会话管理功能。...

    java中filter的用法(过滤器)

    使浏览器不缓存页面的过滤器 这个Filter的主要目的是确保浏览器不对特定的页面进行缓存。这对于需要频繁更新的数据展示页面特别有用,可以确保用户总是看到最新的数据。 ```java public class ForceNoCacheFilter...

    shiro中session的共享问题与完成前后端权限的校验

    在分布式系统中,由于多个服务器可能处理同一个用户的请求,这就涉及到Session的共享问题。Shiro提供了一种解决策略,即通过SessionManager和SessionDAO来实现跨服务器的Session共享。可以配置如Redis或Memcached...

    spring redis session共享实现步骤

    Spring与Redis结合,可以将用户的Session数据存储在Redis这个中央缓存服务器中,确保所有服务器都能访问到同一份Session数据。 2. **引入依赖**: 首先,你需要在项目的`pom.xml`或`build.gradle`文件中添加Spring...

    tomcat7利用redis做session共享所需jar包

    6. **测试与优化**:启动Tomcat7,访问应用以验证session共享是否正常工作。同时,可以根据实际需求调整配置,如增加连接池、优化序列化方式等。 通过上述步骤,你就可以在Tomcat7环境中利用Redis实现session共享,...

    spring-session:spring session+redis实现分布式缓存

    结合Redis这一高效、轻量级的NoSQL数据库,Spring Session能有效地解决session复制和共享的问题,提高系统的可扩展性。 在传统的Web应用中,session通常存储在单个服务器的内存中,当应用部署在多个服务器上时,...

    filter的使用 java 过滤器的几种使用方法

    过滤器在Java Web应用中扮演着“守门人”的角色,它通过`javax.servlet.Filter`接口定义,可以拦截用户请求和服务器响应,对数据进行预处理或后处理。实现过滤器需要完成三个主要方法:`init()`、`doFilter()`和`...

    ssm框架+shiro+redis缓存(某课网代码)

    将用户的session信息存储在Redis中,解决单机环境下session共享问题,提升多服务器环境下的用户体验。 3. **Spring配置**:Spring配置文件会定义Bean的依赖注入,包括SSM框架的各个组件,如DataSource、...

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

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

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

    考虑使用缓存或者session来存储已验证的用户权限信息,减少数据库查询。 - 使用Spring Security的Remember Me功能,可以减少用户的登录频率,提升用户体验。 综上所述,过滤器在用户权限管理中扮演了核心角色,...

    SpringBoot之Filter和Listener简单运用.rar

    在Spring Boot框架中,Filter和Listener是两种非常重要的组件,它们在Web应用程序的生命周期管理和请求处理中起到关键作用。本文将深入探讨Spring Boot如何使用Filter和Listener,以及它们各自的功能和应用场景。 ...

    java中filter的用法

    在这个例子中,我们实现了一个名为 ForceNoCacheFilter 的 Filter,该 Filter 的作用是使浏览器不缓存页面。其实现代码如下: ```java import javax.servlet.*; import javax.servlet.http.HttpServletResponse; ...

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

    这通常通过在数据库或缓存中存储Session ID与在线用户关联,当新登录时检查并更新在线状态实现。 3. **Cookie管理**: Session ID是通过Cookie在客户端和服务器之间传递的。在SSO场景下,可能还需要设置Cookie的...

    Shiro 身份验证、授权、密码和会话管理

    Apache Shiro 是一个强大且易用的 Java 安全框架,它提供了身份验证、授权、密码管理和会话管理等功能,简化了在 Java 应用程序中处理安全性的问题。Shiro 的设计目标是使开发者能够专注于应用程序的安全逻辑,而...

Global site tag (gtag.js) - Google Analytics