千家信息网

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

发表于:2025-02-10 作者:千家信息网编辑
千家信息网最后更新 2025年02月10日,这篇文章主要介绍了java如何使用过滤器实现登录拦截处理,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。滤器实现登录拦截处理一、什么是过
千家信息网最后更新 2025年02月10日java如何使用过滤器实现登录拦截处理

这篇文章主要介绍了java如何使用过滤器实现登录拦截处理,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

滤器实现登录拦截处理

一、什么是过滤器

过滤器是处于客户端与服务器资源文件之间的一道过滤网(驻留在服务器端的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 patterns = new ArrayList();        //静态代码块,在虚拟机加载类的时候就会加载执行,而且只执行一次        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.注册过滤器

@Configurationpublic 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;    }

结果图

感谢你能够认真阅读完这篇文章,希望小编分享的"java如何使用过滤器实现登录拦截处理"这篇文章对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,更多相关知识等着你来学习!

0