此例子为一个简单的登录拦截。

首先在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的更多相关文章

  1. 过滤器(filter)实现用户登录拦截

    过滤器(filter)实现用户登录拦截 >>>>>>>>>>>>>>>>>>>> ...

  2. Java 中的 Filter 过滤器详解

    Filter简介 Filter也称之为过滤器,它是Servlet技术中最实用的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件 ...

  3. Java中的Filter过滤器

    Filter简介 Filter也称之为过滤器,它是Servlet技术中最实用的技术,Web开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件 ...

  4. Spring mvc登录拦截器

    自己实现的第一个Spring mvc登录拦截器 题目要求:拒绝未登录用户进入系统,只要发现用户未登录,则将用户请求转发到/login.do要求用户登录 实现步骤: 1.在spring的配置文件中添加登 ...

  5. java之拦截器Interceptor

    1,拦截器的概念    java里的拦截器是动态拦截Action调用的对象,它提供了一种机制可以使开发者在一个Action执行的前后执行一段代码,也可以在一个Action执行前阻止其执行,同时也提供了 ...

  6. 大型运输行业实战_day05_1_登录+注销+表单重复提交+登录拦截器

    1.登录 登录实现如下步骤: 1.在首页中添加登录按钮 html代码如下: <%@ page contentType="text/html;charset=UTF-8" la ...

  7. struts2自定义登录拦截器

    版权声明:本文为博主原创文章,未经博主允许不得转载. (1)配置web.xml,让xml加载struts2框架 <?xml version="1.0" encoding=&q ...

  8. SpringMVC 使用注解完成登录拦截

    目录 为了实现用户登录拦截你是否写过如下代码呢? 1. 基于Filter 2. 基于Struts 3. 基于SpringMVC 如何使用自定义注解完成自定义拦截呢? 登录注解 SpringMVC 拦截 ...

  9. Java Web之Filter

    Filter被称为过滤器或者拦截器,基本功能就是对调用servler过程的拦截,在servlet进行响应和处理前后实现一些特殊功能.其实,Filter过滤器就是一个实现了javax.servlet.F ...

随机推荐

  1. pythonchallenge 2

     pythonchallenge是一个很有意思的学习python的网站,通过用程序解开一个谜,可以进入到下一个level,总共有几十个level,网址是http://www.pythonchallen ...

  2. 洛谷 - P2444 - 病毒 - AC自动机

    https://www.luogu.org/problemnew/show/P2444 有点恶心,不太明白fail的意义. #include<bits/stdc++.h> using na ...

  3. 51nod1174【基于线段树的RMQ】

    很基础啊~ #include <bits/stdc++.h> using namespace std; typedef long long LL; const int INF=-0x3f3 ...

  4. python __builtins__ enumerate类 (21)

    21.'enumerate', 用于将一个可遍历的数据对象(如列表.元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中. class enumerate(object ...

  5. Oracle之Char VarChar VarChar2

    Oracle之Char VarChar VarChar2 在Oracle数据库中,字符类型有Char.VarChar和VarChar2三种类型,但不大清楚各自区别在哪儿,平时基本上就是用VarChar ...

  6. 使用ansible对远程主机上的ssh公钥进行批量分发

    使用ansible对远程主机上的ssh公钥进行批量分发或者是删除修改操作 ansible内置了一个authorized_key模块,这个模块很好用,我们使用这个模块可以对远程 主机上的ssh公钥进行批 ...

  7. PowerShell~发布你的mvc网站

    通过使用ps加上msbuild可以方便的编译你的.net应用程序,并且可以把它发布到你的磁盘上,部署非常方例! 我们在c盘添加一个hello网站,解决方案名是hello.sln,它的网站是hello. ...

  8. C#基础学习3

    运算符,表达式!

  9. PDO相关函数

    (PHP 5 >= 5.1.0, PHP 7, PECL pdo >= 0.1.0) PDO::__construct — 创建一个表示数据库连接的 PDO 实例 说明 PDO::__co ...

  10. client系列、offset系列、scroll系列

    一.client系列 clientWidth/clientHeight    是我们设置的宽和高加上内边距(没有边框) clientLeft/clientTop 就是我们设置的边框值 二.offset ...