设置常用的过滤器-不适用缓存、登陆过滤器

设置不使用缓存的过滤器


功能描述


将HTTP响应头信息中的缓存参数设置为不进行缓存。

使用方法

在 java web 项目的 web.xml
文件中添加如下代码。


<!--设置不使用缓存的过滤器配置  开始 -->
<filter>
<filter-name>ClearCacheFilter</filter-name>
<filter-class>com.hmw.filter.ClearCacheFilter</filter-class>
</filter>

<filter-mapping>
<filter-name>ClearCacheFilter</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>ClearCacheFilter</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
<!--设置不使用缓存的过滤器配置 结束 -->

过滤器源码


package com.hmw.filter;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletResponse;

/**
* 使浏览器不缓存页面信息的过滤器<BR>
* 创建日期:2012-01-10
*
*/
public class ClearCacheFilter implements Filter {

@Override
public void init(FilterConfig filterConfig) throws ServletException {
}

@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain filterChain) throws IOException, ServletException {
HttpServletResponse httpResponse = (HttpServletResponse) response;
httpResponse.setHeader("Cache-Control", "no-cache");
httpResponse.setHeader("Pragma", "no-cache");
httpResponse.setDateHeader("Expires", -1);
filterChain.doFilter(request, response);
}

@Override
public void destroy() {
}
}

通用的用户登陆过滤器


功能描述


用于检查用户是否登录了系统,如果未登录,则重定向到指的登录页面。

使用方法

在 java web 项目的 web.xml
文件中添加如下代码,对每个参数都进行了详细的说明。


<!—检查用户是否登录了系统的过滤器配置  开始 -->
<filter>
<filter-name>SessionFilter</filter-name>
<filter-class>com.hmw.filter.SessionFilter</filter-class>
<init-param>
<description>将当前登录的用户的信息保存在 session 中时使用的key,如果没有配置此参数,则该过滤器不起作用</description>
<param-name>sessionKey</param-name>
<param-value>userInfo</param-value>
</init-param>
<init-param>
<description>
如果用户未登录(即在 session 中 key 为 sessionKey 的属性不存在或为空),则将请求重定向到该 url。
该 url 不包含web应用的 ContextPath。
如果不配置此参数,则在用户未登录系统的情况下,直接重定向到web应用的根路径(/)
</description>
<param-name>redirectUrl</param-name>
<param-value>/login.jsp</param-value>
</init-param>
<init-param>
<description>
不需要进行拦截的 url 的正则表达式,即:如果当前请求的 url 的 servletPath 能匹配该正则表达式,则直接放行(即使未登录系统)。
此参数的值一般为 loginServlet 和 registServlet 等。
另外,参数 redirectUrl 的值不用包含在该正则表达式中,因为 redirectUrl 对应的 url 会被自动放行。
还有一点需要说明的是,该参数的值不包含web应用的 ContextPath。
</description>
<param-name>excepUrlRegex</param-name>
<!-- 不拦截 /servlets/loginServlet 和 /servlets/registServlet -->
<param-value>/servlets/(login|regist)Servlet</param-value>
</init-param>
</filter>

<filter-mapping>
<filter-name>SessionFilter</filter-name>
<url-pattern>/servlets/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>SessionFilter</filter-name>
<url-pattern>/jsp/*</url-pattern>
</filter-mapping>
<!—检查用户是否登录了系统的过滤器配置 结束 -->

过滤器源码


package com.hmw.filter;

import java.io.IOException;
import java.net.URLEncoder;
import java.util.regex.Pattern;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.lang.StringUtils;

/**
* 用于检查用户是否登录了系统的过滤器<br>
* 创建日期:2012-01-09
*/
public class SessionFilter implements Filter {

/** 要检查的 session 的名称 */
private String sessionKey;

/** 需要排除(不拦截)的URL的正则表达式 */
private Pattern excepUrlPattern;

/** 检查不通过时,转发的URL */
private String forwardUrl;

@Override
public void init(FilterConfig cfg) throws ServletException {
sessionKey = cfg.getInitParameter("sessionKey");

String excepUrlRegex = cfg.getInitParameter("excepUrlRegex");
if (!StringUtils.isBlank(excepUrlRegex)) {
excepUrlPattern = Pattern.compile(excepUrlRegex);
}

forwardUrl = cfg.getInitParameter("forwardUrl");
}

@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
// 如果 sessionKey 为空,则直接放行
if (StringUtils.isBlank(sessionKey)) {
chain.doFilter(req, res);
return;
}

// * 请求 http://127.0.0.1:8080/webApp/home.jsp?&a=1&b=2 时
// * request.getRequestURL(): http://127.0.0.1:8080/webApp/home.jsp
// * request.getContextPath(): /webApp
// * request.getServletPath():/home.jsp
// * request.getRequestURI(): /webApp/home.jsp
// * request.getQueryString():a=1&b=2
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
String servletPath = request.getServletPath();

// 如果请求的路径与forwardUrl相同,或请求的路径是排除的URL时,则直接放行
if (servletPath.equals(forwardUrl) || excepUrlPattern.matcher(servletPath).matches()) {
chain.doFilter(req, res);
return;
}

Object sessionObj = request.getSession().getAttribute(sessionKey);
// 如果Session为空,则跳转到指定页面
if (sessionObj == null) {
String contextPath = request.getContextPath();
String redirect = servletPath + "?" + StringUtils.defaultString(request.getQueryString());
/*
* login.jsp 的 <form> 表单中新增一个隐藏表单域:
* <input type="hidden" name="redirect" value="${param.redirect }">
*
* LoginServlet.java 的 service 的方法中新增如下代码:
* String redirect = request.getParamter("redirect");
* if(loginSuccess){
* if(redirect == null || redirect.length() == 0){
* // 跳转到项目主页(home.jsp)
* }else{
* // 跳转到登录前访问的页面(java.net.URLDecoder.decode(s, "UTF-8"))
* }
* }
*/
response.sendRedirect(contextPath + StringUtils.defaultIfEmpty(forwardUrl, "/")
+ "?redirect=" + URLEncoder.encode(redirect, "UTF-8"));
} else {
chain.doFilter(req, res);
}
}

@Override
public void destroy() {
}
}

设置常用的过滤器-不适用缓存、登陆过滤器,码迷,mamicode.com

时间: 2024-07-29 13:54:33

设置常用的过滤器-不适用缓存、登陆过滤器的相关文章

设置常用过滤器-站点黑名单、内容压缩

设置站点黑名单的过滤器 功能描述 不允许从禁用的站点(IP)访问当前应用,也不允许从禁用的站点链接到当前应用.        为了简单起见,设置禁用站点时,暂不支持使用通配符.只是抛砖引玉了.        比如:禁止其他的网站引用本站的图片资源,只需在此基础上稍作修改即可. 使用方法 在 java web 项目的 web.xml 文件中添加如下代码. <!--设置站点黑名单的过滤器配置 开始 --> <filter> <filter-name>BannedAccess

javaweb登陆过滤器实现

在web.xml中配置登陆过滤器: <!-- 配置登陆过滤器 --> <filter> <filter-name>loginFilter</filter-name> <filter-class>weijiabin.BBS.Utils.LoginFilter</filter-class> <init-param> <param-name>passUrl</param-name> <param-v

Dockerfile常用指令详解&镜像缓存特性

Dockerfile简介 Dockerfile 是Docker中用于定义镜像自动化构建流程的配置文件.在Dockerfile中,包含了构建镜像过程中需要执行的命令和其他操作.通过Dockerfile可以更加清晰,明确的给定Docker镜像的制作过程,由于仅是简单,小体积的文件,在网络等介质中传递的速度快,能够更快的实现容器迁移和集群部署.Dockerfile是一个文本文件,其内包含了一条条的指令,每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建. 相对于提交容器修改在进行镜像迁

加入域的计算机初次登陆后,缓存登陆次数

计算机加入域后,初次登陆计算机后.如果计算机要长期出差,这期间计算机无法联系域控.那么计算机登陆能够的期限是多少呢? 通过了解,加入域的计算机,初次登陆后,如果在无法联系域控的情况下,计算机登陆使用的是缓存登陆,而计算机可以缓存登陆10次.(可以参考:https://support.microsoft.com/en-us/kb/172931.) 当然可以通过更改客户端的注册表将缓存次数调整到50次. 注册表位置如下: HKEY_LOCAL_MACHINE\Software\Microsoft\W

html头文件设置常用之&lt;meta&gt;设置缓存

<meta http-equiv="pragma" content="no-cache">,pragma与no-cache用于定义页面缓存,不缓存页面(为了提高速度一些浏览器会缓存浏览者浏览过的页面,通过下面的定义,浏览器一般不会缓存页面,而且浏览器无法脱机浏览.) <meta http-equiv="cache-control" content="no-cache">,常见的取值有private.no

【MySQL】MySQL中针对大数据量常用技术_创建索引+缓存配置+分库分表+子查询优化(转载)

原文地址:http://blog.csdn.net/zwan0518/article/details/11972853 目录(?)[-] 一查询优化 1创建索引 2缓存的配置 3slow_query_log分析 4分库分表 5子查询优化 二数据转移 21插入数据 如今随着互联网的发展,数据的量级也是撑指数的增长,从GB到TB到PB.对数据的各种操作也是愈加的困难,传统的关系性数据库已经无法满足快速查询与插入数据的需求.这个时候NoSQL的出现暂时解决了这一危机.它通过降低数据的安全性,减少对事务

转:设置ubuntu 14.04 开机root用户登陆

安装完成如需使用root身份登录,可打开终端输入以下命令:#设置root密码sudo passwd root#切换到root用户sudo -s 想要在登录界面使用root身份登录,可编辑/etcghtdm/目录下的lightdm.conf文件,如没有此文件,直接创建 vi /etcghtdmghtdm.conf 文件内容最终为:[SeatDefaults]#启动后以root身份自动登录autologin-user=rootgreeter-session=unity-greeteruser-ses

通过js来设置cookie和读取cookie,实现登陆时记住密码的功能

function setCookie(){ //设置cookie var loginCode = $("#login_code").val(); //获取用户名信息 var pwd = $("#login_password").val(); //获取登陆密码信息 var checked = $("[name='checkbox']:checked");//获取“是否记住密码”复选框 if(checked && checked.le

如何通过策略设置iNotes尝试几次错误密码登陆后锁定账户

1. 请从Domino Administrator 打开服务器配置文档 -> Security 标签, 在 "Internet Lockout" 区段, 根据您的实际情况把如下选项选择上并填写对应的值 . "Enforce Internet Password Lockout" "Yes" "Log Settings" "Lockouts" "Default Maximum Tries All