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引入验证
分享到:
相关推荐
Apache Shiro 是一个强大且易用的 Java 安全框架,它提供了认证、授权、加密和会话管理功能,简化了开发人员处理安全问题的过程。本项目是一个基于 Spring Boot 的 Shiro 全流程示例,涵盖了从用户登录认证到权限...
标题中的“检验用户登录信息(使用Filter,最终版)”是指在Web开发中,通过使用Servlet Filter技术来验证用户登录状态的一种实现方式。Filter是Java Servlet API中的一部分,它允许我们在请求到达目标Servlet或JSP...
在这个主题中,我们将深入探讨如何使用`Filter`进行用户验证。 一、Filter接口简介 `javax.servlet.Filter`是Java Servlet API的一部分,它定义了一个接口,用于在请求被Servlet处理之前和之后执行一些逻辑。Filter...
为避免Session滥用,应合理设计Session的使用,比如使用Session监听器来监听Session的创建和销毁,或者使用Filter进行Session的验证和清理。 8. **会话固定攻击** Session技术的一个安全隐患是会话固定攻击,攻击...
在实际集成过程中,我们需要配置Shiro的 Realm(认证和授权),SessionManager(管理session),CacheManager(使用Redis作为缓存),以及Filter Chain定义,确保请求经过正确的过滤器链。同时,需要在每个节点...
标题“shiro redis session共享”涉及的是Web应用中关于用户会话管理的技术,主要集中在Apache Shiro框架和Redis缓存系统上。Apache Shiro是一款强大的Java安全框架,它提供了身份验证、授权、加密和会话管理功能。...
使浏览器不缓存页面的过滤器 这个Filter的主要目的是确保浏览器不对特定的页面进行缓存。这对于需要频繁更新的数据展示页面特别有用,可以确保用户总是看到最新的数据。 ```java public class ForceNoCacheFilter...
在分布式系统中,由于多个服务器可能处理同一个用户的请求,这就涉及到Session的共享问题。Shiro提供了一种解决策略,即通过SessionManager和SessionDAO来实现跨服务器的Session共享。可以配置如Redis或Memcached...
Spring与Redis结合,可以将用户的Session数据存储在Redis这个中央缓存服务器中,确保所有服务器都能访问到同一份Session数据。 2. **引入依赖**: 首先,你需要在项目的`pom.xml`或`build.gradle`文件中添加Spring...
6. **测试与优化**:启动Tomcat7,访问应用以验证session共享是否正常工作。同时,可以根据实际需求调整配置,如增加连接池、优化序列化方式等。 通过上述步骤,你就可以在Tomcat7环境中利用Redis实现session共享,...
结合Redis这一高效、轻量级的NoSQL数据库,Spring Session能有效地解决session复制和共享的问题,提高系统的可扩展性。 在传统的Web应用中,session通常存储在单个服务器的内存中,当应用部署在多个服务器上时,...
过滤器在Java Web应用中扮演着“守门人”的角色,它通过`javax.servlet.Filter`接口定义,可以拦截用户请求和服务器响应,对数据进行预处理或后处理。实现过滤器需要完成三个主要方法:`init()`、`doFilter()`和`...
将用户的session信息存储在Redis中,解决单机环境下session共享问题,提升多服务器环境下的用户体验。 3. **Spring配置**:Spring配置文件会定义Bean的依赖注入,包括SSM框架的各个组件,如DataSource、...
SpringBoot与Apache Shiro的整合是企业级应用中常见的安全框架集成方式,它能帮助开发者高效地处理身份验证、授权、会话管理和安全管理等问题。在本项目中,我们将深入探讨如何利用SpringBoot与Shiro结合,实现从...
考虑使用缓存或者session来存储已验证的用户权限信息,减少数据库查询。 - 使用Spring Security的Remember Me功能,可以减少用户的登录频率,提升用户体验。 综上所述,过滤器在用户权限管理中扮演了核心角色,...
在Spring Boot框架中,Filter和Listener是两种非常重要的组件,它们在Web应用程序的生命周期管理和请求处理中起到关键作用。本文将深入探讨Spring Boot如何使用Filter和Listener,以及它们各自的功能和应用场景。 ...
在这个例子中,我们实现了一个名为 ForceNoCacheFilter 的 Filter,该 Filter 的作用是使浏览器不缓存页面。其实现代码如下: ```java import javax.servlet.*; import javax.servlet.http.HttpServletResponse; ...
这通常通过在数据库或缓存中存储Session ID与在线用户关联,当新登录时检查并更新在线状态实现。 3. **Cookie管理**: Session ID是通过Cookie在客户端和服务器之间传递的。在SSO场景下,可能还需要设置Cookie的...
Apache Shiro 是一个强大且易用的 Java 安全框架,它提供了身份验证、授权、密码管理和会话管理等功能,简化了在 Java 应用程序中处理安全性的问题。Shiro 的设计目标是使开发者能够专注于应用程序的安全逻辑,而...