java登录拦截Filter
此例子为一个简单的登录拦截。
首先在web.xml中配置拦截类。
<filter-mapping>
<filter-name>SessionFilter</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
</filter-mapping>
<filter>
<filter-name>SessionFilter</filter-name>
<!-- 拦截类 -->
<filter-class>com.skin.generate.user.UserLoginFilter</filter-class>
<init-param>
<param-name>loginUrl</param-name>
<param-value>/finder/login.html</param-value>
</init-param>
<!-- 配置参数 比如不拦截的路径 -->
<init-param>
<param-name>excludes</param-name>
<param-value>
/register.html,
/resource/**/*,
/note/**/*
</param-value>
</init-param>
</filter>
其次就是拦截类的编写。
package com.skin.generate.user;
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.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession; import com.skin.finder.security.UserSession;
import com.skin.finder.web.util.Client;
import com.skin.finder.web.util.CookieUtil;
import com.skin.generate.entity.User; public class UserLoginFilter implements Filter {
/*
* String nofilter; String nofilterFiles[]; String sendRedirect;
*/ public void destroy() { } public void doFilter(ServletRequest req, ServletResponse res,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
String path = request.getServletPath();
String url = request.getRequestURI(); // 如果不需要过滤的静态文件,直接放行
if (path.endsWith(".css") || path.endsWith(".js")
|| path.endsWith("Login.html")
|| url.indexOf("resource") > 0 || url.indexOf("note") > 0
|| url.endsWith("login.jsp") || path.endsWith(".gif")
|| path.endsWith(".ico")) {
chain.doFilter(request, response);
return;
} else {
if (checkUser(request, response)) {
chain.doFilter(request, response);// 如果用户已经登录,就放行
return;
} else {
// 没有登录,重定向到登录页面
String contextPath = getContextPath(request);
response.sendRedirect(contextPath+ "/template/finder/login.jsp");
return;
}
} } protected String getContextPath(HttpServletRequest request) {
String contextPath = request.getContextPath(); if ((contextPath == null) || (contextPath.equals("/"))) {
return "";
}
return contextPath;
} private boolean isInArray(String path, String nofilterFiles[]) {
for (int i = 0; i < nofilterFiles.length; i++) {
String nofilterFile = nofilterFiles[i];
if (nofilterFile.equals(path)) {
return true;
}
}
return false;
} private boolean checkUser(HttpServletRequest request,
HttpServletResponse response) throws IOException { //1.判断cookie 是否存在
Cookie cookie = CookieUtil.getCookie(request, Client.COOKIE_NAME);
if(cookie ==null ){
return false;
} //2.校验session
HttpSession session = request.getSession(false);// 如果不存在返回空
if (session == null) {
return false;
}
//3.校验登录用户
Object obj = session.getAttribute(SessionUtils.USER_NAME);
if (obj == null) {
return false;
} return true;
} public void init(FilterConfig config) throws ServletException {
/*
* nofilter = config.getInitParameter("excludes");
* nofilterFiles =nofilter.split(","); sendRedirect =
* config.getInitParameter("loginUrl");
*/
// System.out.println(Arrays.asList(nofilterFiles));
} }
java登录拦截Filter的更多相关文章
- 过滤器(filter)实现用户登录拦截
过滤器(filter)实现用户登录拦截 >>>>>>>>>>>>>>>>>>>> ...
- Java 中的 Filter 过滤器详解
Filter简介 Filter也称之为过滤器,它是Servlet技术中最实用的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件 ...
- Java中的Filter过滤器
Filter简介 Filter也称之为过滤器,它是Servlet技术中最实用的技术,Web开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件 ...
- Spring mvc登录拦截器
自己实现的第一个Spring mvc登录拦截器 题目要求:拒绝未登录用户进入系统,只要发现用户未登录,则将用户请求转发到/login.do要求用户登录 实现步骤: 1.在spring的配置文件中添加登 ...
- java之拦截器Interceptor
1,拦截器的概念 java里的拦截器是动态拦截Action调用的对象,它提供了一种机制可以使开发者在一个Action执行的前后执行一段代码,也可以在一个Action执行前阻止其执行,同时也提供了 ...
- 大型运输行业实战_day05_1_登录+注销+表单重复提交+登录拦截器
1.登录 登录实现如下步骤: 1.在首页中添加登录按钮 html代码如下: <%@ page contentType="text/html;charset=UTF-8" la ...
- struts2自定义登录拦截器
版权声明:本文为博主原创文章,未经博主允许不得转载. (1)配置web.xml,让xml加载struts2框架 <?xml version="1.0" encoding=&q ...
- SpringMVC 使用注解完成登录拦截
目录 为了实现用户登录拦截你是否写过如下代码呢? 1. 基于Filter 2. 基于Struts 3. 基于SpringMVC 如何使用自定义注解完成自定义拦截呢? 登录注解 SpringMVC 拦截 ...
- Java Web之Filter
Filter被称为过滤器或者拦截器,基本功能就是对调用servler过程的拦截,在servlet进行响应和处理前后实现一些特殊功能.其实,Filter过滤器就是一个实现了javax.servlet.F ...
随机推荐
- Prepare for Mac App Store Submission--为提交到Mac 应用商店做准备
返回 Mac App Store Prepare for Mac App Store Submission 提交到Mac 应用商店之前的准备 Most of your time is spent on ...
- 036--MySQL扩展
一.视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,并可以将其当作表来使用. SELECT * FROM ( S ...
- 算法练习--LeetCode--54. Spiral Matrix 100%
Spiral MatrixMedium Given a matrix of m x n elements (m rows, n columns), return all elements of t ...
- E20170503-hm
leading edge 前沿 trailing edge 后缘 trail v跟踪 top edge 顶边 bottom edge 底边 intrinsic adj 固有的 intrinsi ...
- hihocoder 1331 扩展二进制数(递归)
传送门 题意 略 分析 由低位向高位考虑,令f(n)为n的扩展二进制数表示数 1.当前数为偶数,末位为0或2,那么f(n)=f(n/2)+f(n/2-1) 2.当前数为奇数,末位为1,那么f(n)=f ...
- bzoj1485: [HNOI2009]有趣的数列(Catalan数)
1485: [HNOI2009]有趣的数列 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 2105 Solved: 1117[Submit][Stat ...
- 用AntDeploy如何更新Agent
AntDeploy AntDeploy是一款开源的一键发布部署工具,目的是代替重复性的发布动作,提高部署效率 1.一键部署iis 2.一键部署windows服务 3.一键部署到Docker 4.支持增 ...
- size_t与size_type区别
size() 标准库string里面有个函数size,用来返回字符串中的字符个数,具体用法如下: string st("The expense of spirit\n");cou ...
- 解决error while loading shared libraries
ldd print shared library dependencies.可以查看哪些库没有找到. 这个进程启动失败,使用ldd命令可以发现是因为memcache库没有发现.把该so文件放入/lib ...
- Hdu 3966 Aragorn's Story (树链剖分 + 线段树区间更新)
题目链接: Hdu 3966 Aragorn's Story 题目描述: 给出一个树,每个节点都有一个权值,有三种操作: 1:( I, i, j, x ) 从i到j的路径上经过的节点全部都加上x: 2 ...