• SpringBoot-16-模块开发-首页登陆并权限拦截


    5.6.4 首页登陆并权限拦截
    • 首页开发
    
    
       
          
          
          
          
          Signin Template for Bootstrap
          
          
          
          
       
    
       
          
    
       
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38

    注意请求路径使用的thymeleaf标签th:action=“@{/user/login}”

    还有消息返回提示是判断msg是否存在的strings工具类的使用及逻辑运算符not的使用${not #strings }

    • 控制器的设置LoginController,同mvc一样,不一样的地方在重定向路径加了主页映射路由在MyMvcConfiguration类的addViewControllers方法中,可以屏蔽实际主页请求路径
    package com.zk.controller;
    
    import com.zk.constant.Constant;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.Model;
    import org.springframework.util.StringUtils;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestParam;
    
    import javax.servlet.http.HttpSession;
    
    /**
     * @author CNCLUKZK
     * @create 2022/7/31-23:44
     */
    @Controller
    @RequestMapping("/user")
    public class LoginController {
    
        @RequestMapping("/login")
        public String toLogin(@RequestParam("username") String username, @RequestParam("password") String password, Model model
        , HttpSession session){
    
            if (StringUtils.hasText(username)&&password.contains("123")){
                // 登录成功,将用户信息保存到session对象中
                session.setAttribute(Constant.Session_user,username);
                return "redirect:/main";
            }else {
                model.addAttribute("msg","登陆信息有误!");
                return "index";
            }
        }
    
        @RequestMapping("/loginOut")
        public String loginOut(HttpSession session){
            // 清除 session
            session.removeAttribute(Constant.Session_user);
            //退出操作,重定向到登陆页面
            return "redirect:/index";
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    @Configuration
    public class MyMvcConfiguration implements WebMvcConfigurer {
    
            //视图跳转
            @Override
            public void addViewControllers(ViewControllerRegistry registry) {
                //浏览器发送特殊请求,就会跳转到特定页面
                registry.addViewController("/").setViewName("index");
                registry.addViewController("/index").setViewName("index");
                registry.addViewController("/index.html").setViewName("index");
                registry.addViewController("/main").setViewName("dashboard");
            }
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 未登录权限链接器和springmvc一样需要实现HandlerInterceptor接口
    package com.zk.config;
    
    import com.zk.constant.Constant;
    import org.springframework.util.StringUtils;
    import org.springframework.web.servlet.HandlerInterceptor;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    /**
     * @author CNCLUKZK
     * @create 2022/8/2-12:54
     */
    public class MyHandlerInterceptor implements HandlerInterceptor {
        @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
            String username = (String)request.getSession().getAttribute(Constant.Session_user);
            if (StringUtils.hasText(username)) {
                return true;
            }
            request.setAttribute("msg","没有登陆权限!");
            request.getRequestDispatcher("/index").forward(request,response);
            return false;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 之后将和这个拦截器配置到MyMvcConfiguration可以使用自定义类扩展springmvc的功能,注意拦截器参数先拦截所有请求,之后排除登陆页和静态资源请求
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new MyHandlerInterceptor()).addPathPatterns("/**").excludePathPatterns("/user/login"
        ,"/","/asserts/**","/index");
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 之后显示到dashboard.html主页,需要注意的是显示在top栏的用户信息用thymeleaf标签中的[[${session.Session_user}]]来取,退出按钮用用thymeleaf标签中的th:href="@{/user/loginOut}
    • 访问http://127.0.0.1:8081/zk/正常显示登陆页面,路径不拦截

    在这里插入图片描述

    • 未登录而访问http://127.0.0.1:8081/zk/main主页,请求确实是被拦截了

    在这里插入图片描述

    下一篇:SpringBoot-17-模块开发-员工列表展示
  • 相关阅读:
    Java IO流如何操作(创建,读取,删除,写入)文件呢?
    物流路由线路配载前端算法逻辑实现方案
    【Python学习】字典(dict )的几种遍历方式
    Linux 7.4 -组件离线安装-脚本一键安装
    git的基本使用
    四、nginx正向代理
    javaweb 使用element + vue 完善项目 servlet 优化
    Redis笔记
    ROS学习笔记07、机器人系统仿真(URDF、Xacro、Arbotix、Gazebo)
    leetcode 817. 链表组件(java)
  • 原文地址:https://blog.csdn.net/weixin_42045639/article/details/126448110