• 10、SpringBoot-CRUD登陆拦截


    1、前端页面的设置

    index.html

    <input type="text" class="form-control" name="username" th:placeholder="#{index_Username}" placeholder="Username" required="" autofocus="">
    <label class="sr-only">Password</label>
    <input type="password" class="form-control" name="pwd" th:placeholder="#{index_password}" placeholder="Password" required="">

    2、新建一个controller

    @Controller
    public class LoginController {
        //@RequestMapping(value = "/user/login",method = RequestMethod.POST)
        @PostMapping(value = "/user/login")
        public String login(@RequestParam("username") String username,
        @RequestParam("pwd") String pwd, Map<Object,String> map){
            if (!StringUtils.isEmpty(username) && "12345".equals(pwd)){
                //登录成功
                return "dashboard";
            }else {
                //登录失败
                map.put("msg","账户&密码错误!");
                return "index";
            }
        }
    }
    @RequestMapping(value = "/user/login",method = RequestMethod.POST)
    @PostMapping(value = "/user/login")

    两个使用的效果是一样的!!!

    3、前端页面进行错误提示代码的检验

    <p th:text="${msg}" style="color: red" th:if="${not #strings.isEmpty(msg)}"></p>
    首先th:if判断是否存在,存在即执行th:text

    登陆成功之后有一个弊端,当刷新页面的时候依然执行的时登录时的请求
    所以此时可以使用重定向

     

    首先将试图添加到容器中
    配置类
    @Configuration
    public class config  {
        @Bean
        public WebMvcConfigurer webMvcConfigurer(){
            return  new WebMvcConfigurer(){
                @Override
                public void addViewControllers(ViewControllerRegistry registry) {
                    registry.addViewController("/").setViewName("index");
                    registry.addViewController("/index.html").setViewName("index");
                    registry.addViewController("/index").setViewName("index");
                    registry.addViewController("/success.html").setViewName("dashboard");
                }
            };
        }
        //国际化
        @Bean()
        public LocaleResolver localeResolver(){
            return  new MyLocaleResolver();
        }
    } 

     在进行修改LoginController的方法进行重定向

    @PostMapping(value = "/user/login")
    public String login(@RequestParam("username") String username,
    @RequestParam("pwd") String pwd, Map<Object,String> map){
        if (!StringUtils.isEmpty(username) && "12345".equals(pwd)){
            //登录成功
            return "redirect:/success.html";
        }else {
            //登录失败
            map.put("msg","账户&密码错误!");
            return "index";
        }
    
    }

     关于登陆拦截

     

    这个url在其他的浏览器可以跳过登录,此时需要使用到登陆的拦截器
     
    拦截器的 的实现和springmvc的实现基本一样
     
    拦截类:
    LoginHandlerInterceptor实现 HandlerInterceptor 接口的方法进行拦截
    public class LoginHandlerInterceptor implements HandlerInterceptor {
        //目标方法执行之前
        @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
            Object user = request.getSession().getAttribute("user");
            if (user == null){
                //未登录
                //返回到登录页面
                request.getRequestDispatcher(request.getContextPath() + "/user/login").forward(request,response);
                //设置提示信息
                request.setAttribute("msg","没有权限请先登录~");
                return false;
            }else {
                //已登录
                return true;
            }
        }
        @Override
        public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
    
        }
        @Override
        public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
    
        }
    }

     在spring容器中进行注册

    @Bean
    public WebMvcConfigurer webMvcConfigurer(){
        return  new WebMvcConfigurer(){
            @Override
            public void addViewControllers(ViewControllerRegistry registry) {
                registry.addViewController("/").setViewName("index");
                registry.addViewController("/index.html").setViewName("index");
                registry.addViewController("/main.html").setViewName("dashboard");
            }
    
            //注册拦截器
            @Override
            public void addInterceptors(InterceptorRegistry registry) {
                registry.addInterceptor(new LoginHandlerInterceptor()).addPathPatterns("/**").
                        excludePathPatterns("/","/index.html","/user/login");
            }
        };
    }
    addPathPatterns:添加拦截的路径    /** 表示都拦截
    excludePathPatterns:排除需要拦截的请求,比如访问的首页、登陆按钮的路径.......(根据开发情况)

     值得说一下的是,在登陆之后要进行判断以及session的设置

    @Controller
    public class LoginController {
      //@RequestMapping(value = "/user/login",method = RequestMethod.POST)
      @PostMapping(value = "/user/login")
      public String login(@RequestParam("username") String username,
         @RequestParam("pwd") String pwd, Map<Object,String> map,HttpSession session){
         if (!StringUtils.isEmpty(username) && "12345".equals(pwd)){
          
    //登录拦截
           session.setAttribute("user",username);
          
    //登录成功
           return "redirect:/main.html";
         }else {
          //登录失败
          map.put("msg","账户&密码错误!");
          return "index"; }
       }
    }
  • 相关阅读:
    爬虫总结
    Request模块(八)
    urllib2异常处理(七)
    urllib2 Handler处理器和自定义opener(六)
    urllib2的GET和POST请求(五)
    urllib2模块的基本使用(四)
    HTTP代理器Fiddler(三)
    http协议再复习(二)
    Spring.NET学习笔记6——依赖注入(应用篇)
    4.spring对象的创建(静态工厂 实例工厂 泛型,嵌套类型)
  • 原文地址:https://www.cnblogs.com/Mrchengs/p/10342999.html
Copyright © 2020-2023  润新知