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"; }
   }
}

猜你喜欢

转载自www.cnblogs.com/Mrchengs/p/10342999.html
今日推荐