首页 > 其他分享 >登录拦截器

登录拦截器

时间:2024-05-16 14:54:23浏览次数:22  
标签:Exception 拦截器 登录 request user public

  1. 对于管理系统或其他需要用户登录的系统,都需要登录验证,如果没有登录就不行进行相应的操作。

  2. SpringBoot 通过实现HandlerInterceptor接口实现拦截器,通过实现WebMvcConfigurer接口实现一个配置类,在配置类中注入拦截器,最后再通过 @Configuration 注解注入配置。

  3. 实现HandlerInterceptor接口

    public class UserLoginInterceptor implements HandlerInterceptor {
    
        /***
         * 在请求处理之前进行调用(Controller方法调用之前)
         */
        @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
            System.out.println("执行了拦截器的preHandle方法");
            try {
                HttpSession session = request.getSession();
                //统一拦截(查询当前session是否存在user)(这里user会在每次登录成功后,写入session)
                User user = (User) session.getAttribute(USER_LOGIN_STATE);
                if (user != null) {
                    return true;
                }
                //重定向登录页面
                response.sendRedirect(request.getContextPath() + "/user/login");
            } catch (Exception e) {
                e.printStackTrace();
            }
            return false;
            //如果设置为false时,被请求时,拦截器执行到此处将不会继续操作
            //如果设置为true时,请求将会继续执行后面的操作
        }
    
        /***
         * 请求处理之后进行调用,但是在视图被渲染之前(Controller方法调用之后)
         */
        @Override
        public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
            System.out.println("执行了拦截器的postHandle方法");
        }
    
        /***
         * 整个请求结束之后被调用,也就是在DispatchServlet渲染了对应的视图之后执行(主要用于进行资源清理工作)
         */
        @Override
        public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
            System.out.println("执行了拦截器的afterCompletion方法");
        }
    }
    
  4. 实现WebMvcConfigurer接口,注册拦截器

    @Configuration
    public class LoginConfig implements WebMvcConfigurer {
    
        @Override
        public void addInterceptors(InterceptorRegistry registry) {
            //注册TestInterceptor拦截器
            InterceptorRegistration registration = registry.addInterceptor(new UserLoginInterceptor());
            //所有路径都被拦截
            registration.addPathPatterns("/**");
            //添加不拦截路径
            registration.excludePathPatterns(
                    "/user/login",
                    "/user/register",
                    "/**/*.html",
                    "/**/*.js",
                    "/**/*.css"
            );
        }
    }
    

标签:Exception,拦截器,登录,request,user,public
From: https://www.cnblogs.com/hytip/p/18195926

相关文章

  • ssh免密登录本机设置
    设置SSH免密登录本机主要涉及生成密钥对、将公钥复制到本地(或远程服务器,如果是双向免密)以及测试免密登录等步骤。以下是一个基本的设置流程:生成密钥对:打开终端或命令提示符,并执行以下命令来生成RSA密钥对:ssh-keygen-trsa系统将会提示你指定保存密钥文件的路径和文件名。......
  • 使用命令登录harbor报错authentication required解决方法
    使用命令在终端登录harbor报错报错信息如下#dockerlogin192.168.3.61Authenticatingwithexistingcredentials...StoredcredentialsinvalidorexpiredUsername(admin):adminPassword:Errorresponsefromdaemon:Get"http://192.168.3.61/v2/":unauthorized:......
  • IceRPC之传入响应和拦截器->快乐的RPC
    作者引言.Net8.0下的新RPC很高兴啊,我们来到了IceRPC之传入响应和拦截器->快乐的RPC,基础引导,让自已不在迷茫,快乐的畅游世界。传入响应Incomingresponse了解如何演绎传入的响应。收到传入响应调用器invoker异步返回传入响应。该传入响应是由连接从对等点接收响应......
  • 【django学习-25】登录及使用中间件进行登录校验
    1.登录功能实现1.1:管理员表fromdjango.dbimportmodelsclassAdmin(models.Model):"""管理员"""username=models.CharField(verbose_name="用户名",max_length=32)password=models.CharField(verbose_name="密码......
  • 网站应用微信登录 DEMO
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><title>网站应用微信登录DEMO</title&g......
  • 网站应用微信登录 DEMO
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><title>网站应用微信登录DEMO</title&g......
  • ASP.NET Core的全局拦截器(在页面回发时,如果判断当前请求不合法,不执行OnPost处理器)
    ASP.NETCoreRazorPages中,我们可以在页面模型基类中重载OnPageHandlerExecuting方法。下面的例子中,BaseModel继承自PageModel,是所有页面模型的基类。推荐方案:在BaseModel.cs中,重载OnPageHandlerExecuting方法(看下面代码中的注释):publicoverridevoidOnPageHandlerExecuting......
  • vue---移动端登录页面
    最近在用vue做移动端,做了一个好看的移动端登录界面,保存一下,以后方便直接使用。具体代码:<template><divclass="main-login-container"><divclass="login-top"><imgclass="img":src="logintop"></div><divclass=&q......
  • Windows 10开启免密ssh登录&远程端口转发
    安装OpenSSH服务端设置-系统-可选功能-添加功能-在这里搜索OpenSSH服务端,然后开始安装即可开启sshd服务端可以使用图形界面使用命令行执行services.msc找到服务启动即可,并将其设置为自动。可以使用powershell执行命令启动服务启动服务:Start-Servicesshd查看状态:Get-Service......
  • 开发板登录返回以及退出设计
    IO编程开发板登录返回以及退出设计/******************************************************************************filename:2024-05-14_main.c*author:[email protected]*date:2024-05-14*function:在LCD上显示并触摸开发板登录返回以及退......