精华内容
下载资源
问答
  • 该压缩包实现了利用过滤器或者拦截器对登录信息进行验证跳转登陆页的功能,利用的是SpringBoot和thymeleaf,使用前请先看使用说明
  • springboot拦截器

    万次阅读 2021-02-27 21:49:31
    1.什么是拦截器 拦截器(Interceptor)类似于Servlet中的过滤器,主要用于拦截客户请求并做出相应的处理。与过滤器有如下区别: 1.过滤器只能在容器初始化时被调用...5.过滤器是基于函数回调,而拦截器是基于java的反射

    1.什么是拦截器

    拦截器(Interceptor)类似于Servlet中的过滤器,主要用于拦截客户请求并做出相应的处理。与过滤器有如下区别:
    1.过滤器只能在容器初始化时被调用一次,在action的生命周期中,而拦截器可以多次被调用。
    2.过滤器可以对几乎所有的请求起作用,拦截器只能对action请求起作用。
    3.过滤器不能访问action上下文、值栈里的对象,而拦截器可以访问。
    4.过滤器依赖于servlet容器,而拦截器不依赖于servlet容器。
    5.过滤器是基于函数回调,而拦截器是基于java的反射机制的。
    6.过滤器不能获取IOC容器中的各个bean,而拦截器可以,这点很重要,在拦截器里注入一个service,可以调用业务逻辑。

    2.拦截器特点

    1.请求到达经过拦截器,响应回来也经过拦截器
    2.只能拦截控制器相关请求不能拦截JSP请求
    3.拦截器可以中断用户请求轨迹

    3.拦截器作用

    将多个控制器中共有代码放入拦截器可以减少控制器代码冗余

    4.springmvc中开发拦截器步骤

    1.实现HandlerInterceptor接口(或继承其实现类)或者实现实现WebRequestInterceptor(或继承其实现类)。
    2.XML文件中配置拦截器

    5.springboot中使用拦截器

    在springboot中开发拦截器与mvc中类似,只是用注解代替了xml文件配置。

    自定义配置器:
    在这里插入图片描述

    然后实现WebMvcConfigurer配置器。
    以前一般继承org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter类,不过SrpingBoot 2.0以上WebMvcConfigurerAdapter类就过时了。有以下2中替代方法:
    1.直接实现org.springframework.web.servlet.config.annotation.WebMvcConfigurer接口。(推荐)
    2.继承org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport类。但是WebMvcConfigurationSupport覆盖了@EnableAutoConfiguration里的所有方法,每个方法都需要重写继承并且WebMvcConfigurationSupport会让SpringBoot对mvc的自动配置失效。不过目前大多数项目是前后端分离,并没有对静态资源有自动配置的需求,所以继承WebMvcConfigurationSupport也未尝不可。
    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • Java结合SpringBoot拦截器实现简单的登录认证模块之前在做项目时需要实现一个简单的登录认证的功能,就寻思着使用Spring Boot的拦截器来实现,在此记录一下我的整个实现过程,源码见文章底部。1. 环境搭建IntelliJ ...

    Java结合SpringBoot拦截器实现简单的登录认证模块

    之前在做项目时需要实现一个简单的登录认证的功能,就寻思着使用Spring Boot的拦截器来实现,在此记录一下我的整个实现过程,源码见文章底部。

    1. 环境搭建

    IntelliJ IDEA + Java8 + Spring Boot + Tomcat
    我将之前项目中的登录模块抽离出来,单独放在了一个新建的Spring Boot项目中;
    整个项目的主要结构如下:
    项目结构

    参考资料:使用IDEA创建Spring Boot项目

    2. 代码详解

    2.1 前端代码

    之前项目里别的小伙伴已经写好了一个简单的登录框样式表(login.css)和一些image图,我这里就顺手拿来用了,希望哪天你见了眼熟别拍我…
    login.vm代码:
    注意前端传递给后端Controller的password值并不是用户实际输入的密码!
    实际传递的是用户名 + 密码(统一小写)组合的字符串的md5信息值;
    这样在前后台数据传递及后台数据保存时传递和保存的都不是用户的真实密码值,可以一定程度提升安全性及规避某些风险;

    更多资料可参考:Web前端密码加密是否有意义

    <html>
    <head>
        <title>系统登录</title>
        <meta charset="utf-8"/>
        <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
        <meta name="author" content="Dreamer-1">
        <meta name="renderer" content="webkit" />
    
        <link href="/css/login/login.css" rel="stylesheet">
        <script type="text/javascript" src="/js/login/jquery/jquery.min.js?v=20170207"></script>
        <script type="text/javascript" src="/js/login/md5/md5.js"></script>
    </head>
    
    <body>
        <form name="form1" method="post" action="/login" id="form1" onsubmit="return checkLogin();">
            <div id="main">
            <div class="wrapper">
                <div class="login-hd"></div>
                <div class="login-body">
                    <div class="logo">
                        <span class="icon-logo"></span>
                    </div>
                    <div class="box">
                        <div class="login-item">
                            <span class="icon-user"></span>
                            <input name="username" type="text" id="username" class="login-input" tabindex="1" maxlength="50" placeholder="请输入用户名" />
    
                        </div>
                        <div class="login-item mt35">
                            <span class="icon-pwd"></span>
                            <input type="password" id="password"  class="login-input" tabindex="2" maxlength="32" placeholder="请输入密码"/>
                            <input type="hidden" id="hidePwd" name="password">
                        </div>
                        <div class="login-forget" style="visibility:hidden">
                            <a href="#">忘记密码</a>
                        </div>
    
                        <input type="submit" name="Logon" value="登录" id="Logon" tabindex="3" class="login-btn" />
                        <div class="login-bottom">
                            <div class="msg"  style="display:none;" >
                                <span class="icon-err"></span>
                                <span id="message"></span>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
            </div>
        </form>
    
        <script type="text/javascript">
            // onsubmit值为true时,提交表单,否则显示错误信息
            // 生成用户名+密码组合的md5值,并设置传给后端的密码为该md5值
            function checkLogin() {
            var name = $("#username").val().toLowerCase();
            var pwd = $("#password").val().toLowerCase();
            if(name.trim()=="" || pwd.trim()=="") {
                $("#message").text("请输入用户名和密码");
                $('.msg').show();
                return false;
            }else {
                $('.msg').hide();
            }
    
            var md5info = name + pwd;
            $('#hidePwd').val(md5(md5info));
            //$("#password").val();
            return true;
        }
        </script>
    </body>
    </html>

    welcome.vm代码
    登录成功后显示welcome.vm页的内容,这个页面很简单:

    <h1 align="center">登录成功!!!</h1>
    
    <br>
    <h3><a href="/loginout"><font color="red">退出登录</font></a></h3>

    2.2 后端代码

    后端代码相较于前端要复杂一些,让我们来一一拆解;

    2.2.1 程序入口

    ManApplication.java是整个程序的主入口,因为其上打了@SpringBootApplication的注解
    注意:Spring Boot项目在tomcat上部署运行时,ManApplication需要继承SpringBootServletInitializer
    ManApplication.java代码:

    /**
     * @SpringBootApplication 注解标明该类是本程序的入口
     */
    @SpringBootApplication
    public class ManApplication extends SpringBootServletInitializer {
    
        @Override
        protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
            return application.sources(ManApplication.class);
        }
    
        public static void main(String[] args) {
            SpringApplication.run(ManApplication.class, args);
        }
    }
    2.2.2 Controller

    IndexViewController.java类里就是简单的URL映射;

    /**
     * Created with logindemo.
     * Author: dreamer-1
     * Email: zhong--lei@outllok.com
     * Date: 2018/5/13
     * Time: 下午2:58
     * Description:
     */
    @Controller
    public class IndexViewController {
        /**
         * 登录
         * @return
         */
        @GetMapping("/")
        public String index() {
            return "login";
        }
    
        /**
         * 欢迎页
         * @return
         */
        @GetMapping("/welcome")
        public String welcome() {
            return "welcome";
        }
    }

    LoginViewController.java类接收前端传过来的username和password,进行简单的校验和重定向;
    此处为了简单就只设置了一个正确的账号和密码用于校验,你后续使用时可以结合自己的实际需求来扩充整个校验逻辑(比如通过专门的表来存储用户登录信息等);
    用户名和密码校验通过后会在当前会话的session中放入一个登录标识,以表示当前用户已经登录;在退出登录或会话超时时销毁该标识;

    /**
     * Created with logindemo.
     * Author: dreamer-1
     * Email: zhong--lei@outllok.com
     * Date: 2018/5/13
     * Time: 下午2:49
     * Description:
     */
    @Controller
    public class LoginViewController {
    
        // 预先设置好的正确的用户名和密码,用于登录验证
        private String rightUserName = "admin";
        private String rightPassword = "admin";
    
        /**
         * 登录校验
         *
         * @param request
         * @return
         */
        @RequestMapping("/login")
        public String login(HttpServletRequest request) {
            String username = request.getParameter("username");
            String password = request.getParameter("password");
            if (null == username || null == password) {
                return "redirect:/";
            }
    
            // 前端传回的密码实际为用户输入的:用户名(小写)+ 密码(小写)组合的字符串生成的md5值
            // 此处先通过后台保存的正确的用户名和密码计算出正确的md5值,然后和前端传回来的作比较
            String md5info = rightUserName.toLowerCase() + rightPassword.toLowerCase();
            String realPassword = DigestUtils.md5DigestAsHex(md5info.getBytes());
            if (!password.equals(realPassword)) {
                return "redirect:/";
            }
    
            // 校验通过时,在session里放入一个标识
            // 后续通过session里是否存在该标识来判断用户是否登录
            request.getSession().setAttribute("loginName", "admin");
            return "redirect:/welcome";
        }
    
        /**
         * 注销登录
         *
         * @param request
         * @return
         */
        @RequestMapping("/loginout")
        public String loginOut(HttpServletRequest request) {
            request.getSession().invalidate();
            return "redirect:/";
        }
    
    }
    2.2.3 Interceptor

    LoginInterceptor.java是整个登录认证模块中的核心类之一,它实现了HandlerInterceptor类,由它来拦截并过滤到来的每一个请求;它的三个方法能分别作用于每个请求的不同生命周期,你可以根据自己的需要来加入相应的处理逻辑;

    /**
     * Created with logindemo.
     * Author: dreamer-1
     * Email: zhong--lei@outllok.com
     * Date: 2018/5/13
     * Time: 下午2:58
     * Description:
     */
    public class LoginInterceptor implements HandlerInterceptor {
    
        /**
         * 在请求被处理之前调用
         * @param request
         * @param response
         * @param handler
         * @return
         * @throws Exception
         */
        @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
            // 检查每个到来的请求对应的session域中是否有登录标识
            Object loginName = request.getSession().getAttribute("loginName");
            if (null == loginName || !(loginName instanceof String)) {
                // 未登录,重定向到登录页
                response.sendRedirect("/");
                return false;
            }
            String userName = (String) loginName;
            System.out.println("当前用户已登录,登录的用户名为: " + userName);
            return true;
        }
    
        /**
         * 在请求被处理后,视图渲染之前调用
         * @param request
         * @param response
         * @param handler
         * @param modelAndView
         * @throws Exception
         */
        @Override
        public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
    
        }
    
        /**
         * 在整个请求结束后调用
         * @param request
         * @param response
         * @param handler
         * @param ex
         * @throws Exception
         */
        @Override
        public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
    
        }
    }
    2.2.4 Configuration

    LoginConfiguration.java是另一个核心类之一,它继承自WebMvcConfigurerAdapter类,负责注册并生效我们自己定义的拦截器配置;
    在这里要注意定义好拦截路径和排除拦截的路径;

    WebMvcConfigurerAdapter其实还可以做很多其他的事,包括添加自定义的视图控制器等等,详见这里

    /**
     * Created with logindemo.
     * Author: dreamer-1
     * Email: zhong--lei@outllok.com
     * Date: 2018/5/13
     * Time: 下午2:58
     * Description:
     */
    @Configuration
    public class LoginConfiguration implements WebMvcConfigurer {
        @Override
        public void addInterceptors(InterceptorRegistry registry) {
            // 注册拦截器
            LoginInterceptor loginInterceptor = new LoginInterceptor();
            InterceptorRegistration loginRegistry = registry.addInterceptor(loginInterceptor);
            // 拦截路径
            loginRegistry.addPathPatterns("/**");
            // 排除路径
            loginRegistry.excludePathPatterns("/");
            loginRegistry.excludePathPatterns("/login");
            loginRegistry.excludePathPatterns("/loginout");
            // 排除资源请求
            loginRegistry.excludePathPatterns("/css/login/*.css");
            loginRegistry.excludePathPatterns("/js/login/**/*.js");
            loginRegistry.excludePathPatterns("/image/login/*.png");
        }
    }

    3. 踩坑与填坑

    3.1 多次重定向与Circle view path错误

    刚开始程序部署至tomcat里运行时,理所当然的出现了意想不到的情况,详情如下:
    启动时localhost:8080显示:
    重定向次数过多

    后台一直报错:
    template might not exist

    通过断点调试,发现启动后不停地进入IndexViewController中的“/”这个URL映射里;
    手动指定访问路径为 localhost:8080/welcome 时后台报错:
    cycle-view-path

    解决办法:

    1. 在pom文件中导入thymeleaf依赖:
    <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-thymeleaf</artifactId>
    </dependency>
    1. 在application.properties里添加如下配置:
        spring.thymeleaf.prefix=classpath:/templates/
        spring.thymeleaf.suffix=.vm

    我猜想可能是我的view文件都以.vm结尾,thymeleaf默认找的是.html结尾的视图,所以一直找不到;
    有知道的大神可以在下面留言详细讲解一下 ^_^

    4. 大功告成

    运行截图:
    未登录情况下访问 localhost:8080/welcome 等非登录页面时会自动跳转到登录页面:
    运行截图

    http://www.vxjezfv.cn/
    http://news.vxjezfv.cn/
    http://www.xibiyo.com.cn/
    http://news.xibiyo.com.cn/
    http://www.9208361.org.cn/
    http://news.9208361.org.cn/
    http://www.9111316.cn/
    http://news.9111316.cn/
    http://www.bluelf.com.cn/
    http://news.bluelf.com.cn/
    http://www.qqq136com.cn/
    http://news.qqq136com.cn/
    http://www.2819w.cn/
    http://news.2819w.cn/
    http://www.9019758.org.cn/
    http://news.9019758.org.cn/
    http://www.wydaogou.cn/
    http://news.wydaogou.cn/
    http://www.ralhys.cn/
    http://news.ralhys.cn/

    展开全文
  • 本篇文章主要介绍了SpringBoot拦截器实现对404和500等错误的拦截,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
  • SpringBoot 简单登录功能 拦截器实现。 在实际开发中,我们经常会遇到某些页面需要登录才能查看的情况。下面使用拦截器实现该功能,在用户没有登录的情况下,将网站的所有访问都指向登录页面。 Springboot 登录
  • 不知道为啥不能设置0。这个是demo,有时间博主吧git整理下 链接发出来
  • 自己整合的一个SpringBoot的Demo,告别了传统的web服务文件配置方式,实现了自定义拦截器与HTTPS请求的配置(使用Myeclipse打开,web加MAVEN型源码)
  • 主要介绍了Springboot引入拦截器并放行swagger代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
  • 其中包含了http的4中请求,put,delete,post和get。在什么情况下用到什么请求都会有相应的方法说明。包含了登录拦截器
  • 1、在SpringBoot中如何实现自定义过滤器(Filter)和拦截器(Interceptor) 2、通过执行案例了解多个过滤器和拦截器的执行顺序 【本案例包含源码以及可执行的jar文件,源码文件建议使用IDEA进行导入查看学习,建议使用...
  • Auth-demo 基于Springboot前后端分离式,利用拦截器完成登录拦截的demo 详细介绍请戳
  • // 多个拦截器组成一个拦截器链 registry . addInterceptor ( new SessionInterceptor ( ) ) . addPathPatterns ( "/**" ) . excludePathPatterns ( "/static/**" ) ; } //addResoureHandler指的是对外...

    本人新手,不足之处,请谅解。 有不足之处,欢迎提出。

    下面开始给大家介绍具体的实现:
    先说下具体用到的几个类:
    在这里插入图片描述
    1.在这里先给大家说下Session的主要内容( 检查session登陆的信息,判断是否是首页登陆,(是则通过,不是跳转登陆页面)判断是否是ajax的请求,是则直接放行)

    HandlerInterceptor :SpringWebMVC的处理器拦截器,类似于Servlet开发中的过滤器Filter,用于处理器进行预处理和后处理
    preHandle:方法是进行处理器拦截用的,顾名思义,该方法将在Controller处理之前进行调用。
    postHandle:postHandle是进行处理器拦截用的,它的执行时间是在处理器进行处理之后,也就是在Controller的方法调用之后执行,但是它会在DispatcherServlet进行视图的渲染之前执行,也就是说在这个方法中你可以对ModelAndView进行操作。
    afterCompletion:调用前提:preHandle返回true,调用时间DispatcherServlet进行视图的渲染之后

    下面我来贴出具体代码

    package com.example.admins.system;
    
    
    import com.example.admins.Bean.UserBean_a;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.web.servlet.HandlerInterceptor;
    import org.springframework.web.servlet.ModelAndView;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    /**
     * @describe Session拦截器
     */
    public class SessionInterceptor implements HandlerInterceptor {
    
        private static final Logger LOGGER = LoggerFactory.getLogger(SessionInterceptor.class);
    
        /**
         * 检查session中的登录信息,区别ajax
         */
        @Override                                      //获取请求 和发送请求到服务器中   定义类的名称
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
            //获取类的名称  赋值给requestURI  参数 进行相关的调用
            String requestURI = request.getRequestURI();
            //在控制台输出  获取到的所有的相关的路径
            LOGGER.info("Session 检查,请求 URI:" + requestURI);
            // 再次获取参数赋值给uri的问题
            String uri = request.getRequestURI();
            //判断非空
            if (uri != null) {
                //todo 判断是否的登陆的首页  登陆则通过
                //String类型有一个方法:contains(),该方法是判断字符串中是否有子字符串。如果有则返回true,如果没有则返回false。  page/login是我的登陆页面
                if (uri.contains("/page/login")) {// 登录请求直接放行 对于某些不需要验证的uri可以特殊处理
    
                    return true;
    
                }
                //todo 判断是否已经登录    此处的("user") 是登陆中获取的,判断是否登陆
                UserBean_a member = (UserBean_a) request.getSession().getAttribute("user");
                if (member == null) {
                    if (isAjax(request)) {
                        LOGGER.info("是ajax请求");
                        //指定格式防止乱码
                        response.setHeader("Cache-Control", "no-cache");
                        response.setHeader("Content-Type", "text/json;charset=utf-8");
                        response.setCharacterEncoding("UTF-8");
                    } else {
                        //重定向页面 如果没有登录就跳转到登录页面   page/login是我的登陆页面
                        response.sendRedirect(request.getContextPath() + "/page/login");
                        //停止 运行
                        return false;
                    }
    
                }
            }
            //继续 运行
            return true;
        }
    
        /**
         * 处理成功才进入post处理
         */
        @Override
        public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
            //LOGGER.info(">>>>>>>>>>>请求处理之后进行调用,但是在视图被渲染之前(Controller方法调用之后)");
    
        }
    
        /**
         * 处理完后进入,不论是否抛除异常
         */
        @Override
        public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
            //LOGGER.info(">>>>>>>>>>>在整个请求结束之后被调用,也就是在DispatcherServlet 渲染了对应的视图之后执行(主要是用于进行资源清理工作)");
        }
    
        /**
         * @param request
         * @return
         * @describe 判断是否是ajax请求
         */
        private boolean isAjax(HttpServletRequest request) {
            String xrw = request.getHeader("X-Requested-With");
            if ("XMLHttpRequest".equalsIgnoreCase(xrw)) {
                return true;
            }
            return false;
        }
    }
    
    

    2.下面我来给大家介绍,拦截器的主要类
    这个类的位置也很关键,请大家注意,这是我遇到的坑
    在这里插入图片描述

    代码贴上:

    package com.example.admins;
    
    import com.example.admins.system.SessionInterceptor;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.web.servlet.config.annotation.*;
    
    //放在主类上不包括其他东西
    //WebMvcConfigurerAdapter这个类,重写这个类中的方法可以让我们增加额外的配置
    @Configuration
    public class WebAppConfigurer implements WebMvcConfigurer {
    //addResourceLocations指的是文件放置的目录
    
        @Override
        public void addInterceptors(InterceptorRegistry registry) {
            // 多个拦截器组成一个拦截器链 
            registry.addInterceptor(new SessionInterceptor()).addPathPatterns("/**").excludePathPatterns("/static/**");
        }
    //addResoureHandler指的是对外暴露的访问路径 此处一般默认即可
        @Override
        public void addResourceHandlers(ResourceHandlerRegistry registry) {
            // 静态资源拦截器
            registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");
        }
    }
    

    我说下我在这个类中遇到的坑:excludePathPatterns("/static/**"); 是放行本类中的一些css/js 等样式,大家在此处应该注意下: 1.是不是所有的样式在static中 2.直接贴图,
    在这里插入图片描述确认页面的样式是不是从static 中进去 如果不是他可能会把你的样式进行拦截。此处是本人的坑,希望大家注意;

    3.最后我来说下:登陆中对此类的应该 控制台的登陆代码
    贴代码:
    此处的 User 是我们在第一条 登陆判断的时候的 User ,他从控制台获取登陆的数据,来判断你是否登陆
    登录成功之后将用户信息保存到session里
    session.setAttribute(“user”, userBean1);

    //登陆
        @RequestMapping(value = "/index")
        @ResponseBody
        public String lo(UserBean_a userBean, HttpSession session) {
    
            System.out.println("------------控制台前端输入的获取的账号输入的" + userBean.getUsername());
    
             UserBean_a userBean1 = userService.userLogin(userBean);
            System.out.println("------------userBean1的账号" +userBean1);
           
            if (userBean1 != null) {          
                System.out.println(userBean1);
                log.debug("用户登陆成功--{}", JSONObject.toJSONString(userBean1));
                // 登录成功之后将用户信息保存到session里
                session.setAttribute("user", userBean1);
                /* System.out.println(md5Pass);*/
                return userBean1.toString();
            }
            log.debug("用户登陆失败--{}", JSONObject.toJSONString(userBean1));
            return null;
        }
    

    这样就完成了登陆拦截请求。

    一个新手、没背景的野鸡大学挣脱出来的野小子,主要以不断
    学习,不断记录,用思维认知去看这个世界。写作、阅读、分享,用独自的思考和感悟分享给互联网里的每一位技术人。
    不爱学习的我们,无力的挣扎吧!

    展开全文
  • springboot2.1+redis+拦截器 防止表单重复提交详细完整介绍,所用到的文件都上传了,下载即可使用。自己花了半天整理,并且测试通过,使用在实际项目中的,希望对每一个下载的朋友有帮助。
  • 主要介绍了SpringBoot拦截器Filter的使用方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
  • 在基本框架搭好的前提下第一步:新建一个拦截类LoginInterceptor继承HandlerInterceptor接口package com.association.intercepter;import org.springframework.web.servlet.HandlerInterceptor;import javax.servlet...

    在基本框架搭好的前提下

    第一步:新建一个拦截类LoginInterceptor继承HandlerInterceptor接口

    package com.association.intercepter;

    import org.springframework.web.servlet.HandlerInterceptor;

    import javax.servlet.http.HttpServletRequest;

    import javax.servlet.http.HttpServletResponse;

    public class LoginInterceptor implements HandlerInterceptor {

    @Override

    public boolean preHandle(HttpServletRequest request,

    HttpServletResponse response,

    Object handler) throws Exception {

    if(request.getSession().getAttribute("user")== null){

    response.sendRedirect("/admin");

    return false;

    }

    return true;

    }

    }

    第二步:新建一个配置类WebConfig继承WebMvcConfigurationSupport

    接口,重写addInterceptors方法

    package com.association.intercepter;

    import org.springframework.context.annotation.Configuration;

    import org.springframework.web.servlet.config.annotation.InterceptorRegistry;

    import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;

    import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;

    @Configuration

    public class WebConfig extends WebMvcConfigurationSupport {

    @Override

    protected void addInterceptors(InterceptorRegistry registry) {

    registry.addInterceptor(new LoginInterceptor())

    .addPathPatterns("/admin/**")

    .excludePathPatterns("/admin")

    .excludePathPatterns("/admin/adminLogin");

    }

    }

    如果出现"No mapping for GET"静态资源的情况,在webConfig配置类中添加

    private static final String[] CLASSPATH_RESOURCE_LOCATIONS = {

    "classpath:/META-INF/resources/", "classpath:/resources/",

    "classpath:/static/", "classpath:/public/" };

    @Override

    protected void addResourceHandlers(ResourceHandlerRegistry registry) {

    if (!registry.hasMappingForPattern("/webjars/**")) {

    registry.addResourceHandler("/webjars/**").addResourceLocations(

    "classpath:/META-INF/resources/webjars/");

    }

    if (!registry.hasMappingForPattern("/**")) {

    registry.addResourceHandler("/**").addResourceLocations(

    CLASSPATH_RESOURCE_LOCATIONS);

    }

    }

    展开全文
  • SpringBoot的URL拦截器

    2020-12-31 16:38:23
    1、数据验证拦截器类 package com.yt.interceptor; import lombok.extern.log4j.Log4j2; import org.springframework.http.MediaType; import org.springframework.lang.Nullable; import org.springframework....
  • 上篇文章我们已经实现了使用自定义注解验证 token 信息,这样我们就会发现,当我们需要验证的接口较多时,我们需要每个方法上面都加上 @JwtToken 这个注解,也是非常麻烦, 本片文章,我们继续使用拦截器来实现 ...
  • 一种就是用拦截器,一种就是过滤器 拦截器相对来说比较专业,而过滤器虽然不专业但是也能完成基本的拦截请求要求。 一、拦截器方式 1、配置HandlerInterceptor 下面这个也是我们公司项目拦截器的写法,总体来说感觉...
  • SpringBoot 拦截器中校验Json数据背景做开发的时候,经常会使用@RequestBody注解,这个注解是非常的好用。但是如果你想在请求参数传到后台的时候做一个参数检验,当然可以!使用SpringMVC的拦截器,在拦截器里把...
  • springboot拦截器验证token实现登陆

    千次阅读 2019-12-12 16:36:55
    // 多个拦截器组成一个拦截器链 // addPathPatterns 用于添加拦截规则 // excludePathPatterns 用户排除拦截 @Override public void addInterceptors(InterceptorRegistry registry) { registry....
  • 1.1 springboot整合拦截器 1.1.1 自定义拦截器 1.实现HandlerInterceptor接口,重写3个方法的逻辑 preHandle:调用Controller某个方法之前 postHandle:Controller之后调用,视图渲染之前,如果控制器...
  • SpringBoot拦截器

    2020-12-22 11:24:39
    拦截器的实现类​在编写一个拦截器的类的时候需要实现HandlerInterceptor接口HandlerInterceptor接口方法如下:boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)...
  • 玩转 SpringBoot 2 快速整合拦截器

    千次阅读 多人点赞 2019-09-24 13:05:34
    因为在SpringBoot 中没有 xml 文件,所以SpringBoot 为我们提供 Java Config 的方式来配置拦截器。配置方式有2种: 1. 继承 WebMvcConfigurerAdapter (官方已经不建议使用) 2. 实现 WebMvcConfigurer
  • 拦截器实现SpringBoot跨域请求

    千次阅读 2020-02-26 17:04:06
    因为springboot的@CrossOrigin注解在拦截器上无效,有时候就不能在拦截器返回给数据前端信息。 所以自己实现拦截器实现跨域处理,再在普通拦截器上,在HttpServletResponse封装返回给前端的信息 。 这里就要先了解...
  • Springboot实现Session拦截器

    千次阅读 2019-03-10 08:14:51
    springboot实现session拦截器供参考: //session拦截器 @Component(&quot;sessionInterceptor&quot;) public class SessionInterceptor extends HandlerInterceptorAdapter{ // 忽略的URL地址 private ...
  • SpringBoot拦截器实现登录拦截

    万次阅读 多人点赞 2019-07-12 22:27:29
    SpringBoot拦截器可以做什么 可以对URL路径进行拦截,可以用于权限验证、解决乱码、操作日志记录、性能监控、异常处理等 SpringBoot拦截器实现登录拦截 pom.xml: <?xml version="1.0" encoding="UTF-8"?> ...
  • springboot利用拦截器打印各个接口的响应时间,快速统计各接口执行速度,方便接口优化。springboot利用拦截器打印各个接口的响应时间,快速统计各接口执行速度,方便接口优化。springboot利用拦截器打印各个接口的响应...
  • 拦截器(Interceptor)本篇面对的是一些刚接触springboot的人群所以主要讲解filter和interceptor的简单实现和它们之间到底有什么区别(一些复杂的功能我会之后发出文章,请记得关注)Filter的简单实现字面意思:过滤器...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 41,542
精华内容 16,616
关键字:

java拦截器springboot

java 订阅
spring 订阅