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