java 使用过滤器实现登录拦截处理

目录
  • 滤器实现登录拦截处理
    • 一、什么是过滤器
    • 二、工作原理及生命周期
    • 三、过滤器使用
  • filter简易实现登录功能拦截
    • LoginFliter
    • controller
    • 结果图

滤器实现登录拦截处理

一、什么是过滤器

过滤器是处于客户端与服务器资源文件之间的一道过滤网(驻留在服务器端的Web组件),在访问资源文件之前,通过一系列的过滤器对请求进行修改、判断等,把不符合规则的请求在中途拦截或修改。也可以对响应进行过滤,拦截或修改响应

二、工作原理及生命周期

举个例子 当我们登录系统可以访问到页面,当退出登录后,要访问就必须重新登录,这就是过滤器起到的作用。当我们访问某个接口时,过滤器会拦截请求,判断当前用户是否是登录状态,若登录则放行访问,若未登录则返回指定页面(通常为登录页或一个客户友好的提示页)

这个过程包含了过滤器的生命周期:

1.实例化

2.初始化

3.执行过滤操作(包括访问前对request操作和返回时对response的操作处理)

4.销毁

三、过滤器使用

在springboot项目简单使用过滤器进行登录拦截处理

1.实现过滤器

public class MyFilter implements Filter {
	private static final String CURRENT_USER = "current_user";
   //配置白名单
	protected static List<Pattern> patterns = new ArrayList<Pattern>();
	//静态代码块,在虚拟机加载类的时候就会加载执行,而且只执行一次
	static {
		patterns.add(Pattern.compile("/index"));
		patterns.add(Pattern.compile("/login"));
		patterns.add(Pattern.compile("/register"));
	}
	@Override
	public void init(FilterConfig filterConfig) throws ServletException {
	}
	@Override
	public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
		HttpServletRequest httpRequest = (HttpServletRequest) servletRequest;
		HttpServletResponse httpResponse = (HttpServletResponse) servletResponse;
		HttpServletResponseWrapper wrapper = new HttpServletResponseWrapper(httpResponse);
		String url = httpRequest.getRequestURI().substring(httpRequest.getContextPath().length());
		if (isInclude(url)) {
			//在白名单中的url,放行访问
			filterChain.doFilter(httpRequest, httpResponse);
			return;
		}
		if (SessionUtils.getSessionAttribute(CURRENT_USER) != null) {
			//若为登录状态 放行访问
			filterChain.doFilter(httpRequest, httpResponse);
			return;
		} else {
			//否则默认访问index接口
			wrapper.sendRedirect("/index");
		}
	}
	@Override
	public void destroy() {
	}
//判断当前请求是否在白名单
	private boolean isInclude(String url) {
		for (Pattern pattern : patterns) {
			Matcher matcher = pattern.matcher(url);
			if (matcher.matches()) {
				return true;
			}
		}
		return false;
	}
}

2.注册过滤器

@Configuration
public class WebConfig {
	/**
	 * 配置过滤器
	 * @return
	 */
	@Bean
	public FilterRegistrationBean someFilterRegistration() {
		FilterRegistrationBean registration = new FilterRegistrationBean();
		registration.setFilter(myFilter());
		//拦截/*的访问 多级匹配(springboot 过滤器/*以及匹配 /**多级匹配)
		registration.addUrlPatterns("/*");
		registration.setName("myFilter");
		return registration;
	}
	/**
	 * 创建一个bean
	 * @return
	 */
	@Bean(name = "myFilter")
	public Filter myFilter() {
		return new MyFilter();
	}
}

3.运行项目

访问/index,会发现没有被拦截,返回正确结果

在未登录状态,访问/update接口,会被拦截跳转至/index页

在登录状态,访问/update接口,可以访问

这里也可以在程序debug看下。简单的过滤器功能完成。

常用过滤器及其使用后续再来学习。

filter简易实现登录功能拦截

暑期项目实习第八课, filter简易实现登录功能拦截

LoginFliter

public class LoginFliter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
    }
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest) servletRequest;
        HttpServletResponse response = (HttpServletResponse) servletResponse;
        HttpSession session = request.getSession();
        User user = (User)session.getAttribute("user");
        String uri = request.getRequestURI();
        System.out.println(uri.indexOf("findAll.do"));
        System.out.println(uri.indexOf("login.do"));
        if(user==null && uri.indexOf("login.do")==-1){
            response.sendRedirect(request.getContextPath()+"/");
        }else {
            filterChain.doFilter(request,response);
        }
    }
    @Override
    public void destroy() {
    }
}

controller

   @RequestMapping("/login.do")
    public ModelAndView login(User user, HttpSession session){
        boolean flag = userService.login(user.getName(),user.getPassword());
        ModelAndView modelAndView = new ModelAndView();
        if(flag){
            session.setAttribute("user",user);
            modelAndView.setViewName("../ok");
        }else {
            modelAndView.setViewName("../failure");
        }
        return modelAndView;
    }

结果图

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • 使用Servlet Filter实现系统登录权限

    Servlet Filter介绍 过滤器是一些web应用程序组件,可以绑定到一个web应用程序中.但是与其他web应用程序组件不同的是,过滤器是"链"在容器的处理过程中的.这就意味着它们会在servlet处理器之前访问一个进入的请求,并且在外发响应信息返回到客户前访问这些响应信息.这种访问使得过滤器可以检查并修改请求和响应的内容. Filter适用的场景: 1.为一个web应用程序的新功能建立模型(可被添加到web应用程序中或者从web应用程序中删除而不需要重写基层应用程序代码) 2.

  • 使用Filter实现登录权限验证

    本文实例为大家分享了用Filter实现登录权限验证的具体代码,供大家参考,具体内容如下 用户在访问任何界面时,会查询用户是否登录过,如果登录过则可以直接访问,没有登录的话跳到登录界面 web.xml配置过滤器 <filter> <filter-name>myFilter</filter-name> <filter-class>com.zyk.ctrl.MyFilter</filter-class> <!-- 配置初始化参数,指明再没有登录的

  • java中使用Filter控制用户登录权限具体实例

    学jsp这么长时间,做的项目也有七八个了,可所有的项目都是用户登录就直接跳转到其拥有权限的页面,或者显示可访问页面的链接.使用这种方式来幼稚地控制访问权限.从来没有想过如果我没有登录,直接输入地址也可以直接访问用户的页面的. 在jsp中权限的控制是通过Filter过滤器来实现的,所有的开发框架中都集成有Filter,如果不适用开发框架则有如下实现方法: LoginFilter.java 复制代码 代码如下: public class LoginFilter implements Filter {

  • Spring MVC过滤器-登录过滤的代码实现

    一个非常简单的登录权限拦截器,具体代码如下: 以下代码是继承OncePerRequestFilter实现登录过滤的代码: /** * * @author geloin * @date 2012-4-10 下午2:37:38 */ package com.test.spring.filter; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.FilterChain; import javax.

  • SpringBoot拦截器实现登录拦截的方法示例

    源码 GitHub:https://github.com/291685399/springboot-learning/tree/master/springboot-interceptor01 SpringBoot拦截器可以做什么 可以对URL路径进行拦截,可以用于权限验证.解决乱码.操作日志记录.性能监控.异常处理等 SpringBoot拦截器实现登录拦截 pom.xml: <?xml version="1.0" encoding="UTF-8"?> &

  • java 使用过滤器实现登录拦截处理

    目录 滤器实现登录拦截处理 一.什么是过滤器 二.工作原理及生命周期 三.过滤器使用 filter简易实现登录功能拦截 LoginFliter controller 结果图 滤器实现登录拦截处理 一.什么是过滤器 过滤器是处于客户端与服务器资源文件之间的一道过滤网(驻留在服务器端的Web组件),在访问资源文件之前,通过一系列的过滤器对请求进行修改.判断等,把不符合规则的请求在中途拦截或修改.也可以对响应进行过滤,拦截或修改响应 二.工作原理及生命周期 举个例子 当我们登录系统可以访问到页面,当退

  • Java中过滤器 (Filter) 和 拦截器 (Interceptor)的使用

    1.过滤器 (Filter) 过滤器的配置比较简单,直接实现Filter 接口即可,也可以通过@WebFilter注解实现对特定URL拦截,看到Filter 接口中定义了三个方法. init() :该方法在容器启动初始化过滤器时被调用,它在 Filter 的整个生命周期只会被调用一次.注意:这个方法必须执行成功,否则过滤器会不起作用. doFilter() :容器中的每一次请求都会调用该方法, FilterChain 用来调用下一个过滤器 Filter. destroy(): 当容器销毁 过滤器

  • Java web过滤器验证登录防止未登录进入界面

    今天用ssh2写了个简单的系统,发现了一个问题,我这系统必须先登录成功才能进入主页,但我在浏览器里直接输入主页地址,发现也能进入,这个肯定不好,毫无安全性可言,后经查资料发现需要登录过滤器,就试了下,发现果然可以避免未经登录即可进入主页的危险,下面是我整理出的详细步骤: 1.首先写一个权限过滤filter类,实现Filter接口 import java.io.IOException; import javax.servlet.Filter; import javax.servlet.Filter

  • Java利用过滤器实现完善登录功能

    目录 1.问题引入 2.解决思路 3.代码实现 3.1 定义登录校验过滤器 3.2 开启组件扫描 1.问题引入 我们已经完成了后台系统的登录功能开发,但是目前还存在一个问题,就是用户如果不登录,直接访问系统首页面,照样可以正常访问. 很明显,上面这种情况并不合理,我们希望看到的效果应该是,只有登录成功后才可以访问系统中的页面,如果没有登录, 访问系统中的任何界面都直接跳转到登录页面. 2.解决思路 使用 过滤器或者拦截器来实现,在过滤器.拦截器中拦截前端发起的请求,判断用户是否已经完成登录,如果

  • 浅析JAVA中过滤器、监听器、拦截器的区别

    1.过滤器:所谓过滤器顾名思义是用来过滤的,在java web中,你传入的request,response提前过滤掉一些信息,或者提前设置一些参数,然后再传入servlet或者struts的action进行业务逻辑,比如过滤掉非法url(不是login.do的地址请求,如果用户没有登陆都过滤掉),或者在传入servlet或者struts的action前统一设置字符集,或者去除掉一些非法字符(聊天室经常用到的,一些骂人的话).filter 流程是线性的, url传来之后,检查之后,可保持原来的流程

  • Java自定义过滤器和拦截器实现ThreadLocal线程封闭

    目录 线程封闭 ThreadLocal线程封闭实现步骤 封装ThredLocal的方法 自定义过滤器 自定义拦截器 Application类启动类中配置自定义过滤器和拦截器 定义调用接口 请求访问验证 线程封闭 线程封闭一般通过以下三个方法: Ad-hoc线程封闭:程序控制实现,最糟糕,忽略 堆栈封闭:局部变量,无并发问题 ThreadLocal线程封闭:特别好的封闭方法 方法2是最常用的,变量定义在接口内,本文主要讲解方法三,SpringBoot项目通过自定义过滤器和拦截器实现ThreadLo

  • java web实现自动登录

    本文实例为大家分享了java web实现自动登录的具体代码,供大家参考,具体内容如下 实现思路 1.在登录的 api 或 servlet中验证用户名密码 2.如果验证成功,则把该用户信息存在 服务器 的 session 缓存中,并把 可以表示该用户的 信息存在 cookie中返回.例如: //存储 session request.getSession().setAttribute("userBean", queryUser); Cookie cookie = new Cookie(&q

  • 基于SpringMVC实现网页登录拦截

    目录 1.简介 2.自定义拦截器 3. 登录拦截 3.1 先做一个页面 3.2 登录拦截 1.简介 SpringMVC的处理器拦截器类似于Servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理. 拦截器和过滤器的区别在于拦截器使AOP思想的具体应用 过滤器 servlet规范中的一部分,任何java web工程都可以使用 在url-pattern中配置了/*之后,可以对所有要访问的资源进行拦截 需要重写方法 拦截器 SpringMVC框架自己的,只有使用了SpringMVC框架

  • 基于Java实现扫码登录的示例代码

    目录 基本介绍 原理解析 1. 身份认证机制 2. 流程概述 代码实现 1. 环境准备 2. 主要依赖 3. 生成二维码 4. 扫描二维码 5. 确认登录 6. PC 端轮询 7. 拦截器配置 效果演示 1. 工具准备 2. 数据准备 3. 扫码登录流程展示 结语 基本介绍 相信大家对二维码都不陌生,生活中到处充斥着扫码登录的场景,如登录网页版微信.支付宝等.最近学习了一下扫码登录的原理,感觉蛮有趣的,于是自己实现了一个简易版扫码登录的 Demo,以此记录一下学习过程. 实际上是面试的时候被问到

  • SpringBoot通过ThreadLocal实现登录拦截详解流程

    目录 1 前言 2 具体类 2.1HandlerInterceptor 2.2WebMvcConfigurer 3 代码实践 1 前言 注册登录可以说是平时开发中最常见的东西了,但是一般进入到公司之后,像这样的功能早就开发完了,除非是新的项目.这两天就碰巧遇到了这样一个需求,完成pc端的注册登录功能. 实现这样的需求有很多种方式:像 1)HandlerInterceptor+WebMvcConfigurer+ThreadLocal 2)Filter过滤器 3)安全框架Shiro(轻量级框架) 4

随机推荐