登录功能实现
- 登录
- 登录拦截器
登录
由于我们为了方便,项目没有连接数据库,那么我们就让这个页面输入任意用户名都可以登陆成功
1、首先我们要把登录页面的表单提交地址写一个controller
<form class="form-signin" th:action="@{/user/login}">
//这里面的所有表单标签都需要加上一个name属性
2、编写对应的controller
@Controller
public class LoginController {
@RequestMapping("/user/login")
public String login(
@RequestParam("username") String username,
@RequestParam("password") String password,
Model model,
HttpSession session){
//具体的业务,判断用户名密码是否正确
if (!StringUtils.isEmpty(username)&&"123456".equals(password)){
session.setAttribute("loginUser",username);
return "redirect:/main.html";
}else {
//告诉用户登陆失败
model.addAttribute("msg","用户名或密码错误!");
return "index";
}
}
}
然后启动项目测试登陆是否能成功即可
3、登录失败的话,我们需要将后台信息输出到前台,可以在首页标题下面加上判断
<!--如果msg的值为空,则不显示消息-->
<!--判断是否显示,使用if, ${}可以使用工具类,可以看thymeleaf的中文文档-->
<p style="color: red" th:text="${msg}" th:if="${! #strings.isEmpty(msg)}"></p>
优化,登录成功后,由于是转发,链接不变,我们可以重定向到首页!
4、我们再添加一个视图控制映射,在我们的自己的MyMvcConfig中:
registry.addViewController("/main.html").setViewName("dashboard");
5、将 Controller 的代码改为重定向;
//登录成功!防止表单重复提交,我们重定向
return "redirect:/main.html";
重启测试,重定向成功!后台主页正常显示!
登录拦截器
但是又发现新的问题,我们可以直接登录到后台主页,不用登录也可以实现!怎么处理这个问题呢?我们可以使用拦截器机制,实现登录检查
1、我们先自定义一个拦截器
public class LoginHandlerInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//登陆成功之后,应当有用户的session
Object loginUser = request.getSession().getAttribute("loginUser");
if (loginUser==null){//没有登陆
request.setAttribute("msg","没有权限,请先登录!");
request.getRequestDispatcher("/index.html").forward(request,response);
return false;
}else {
return true;
}
}
}
2、然后将拦截器注册到我们的SpringMVC配置类当中!
@Override
public void addInterceptors(InterceptorRegistry registry) {
// 注册拦截器,及拦截请求和要剔除哪些请求!
// 我们还需要过滤静态资源文件,否则样式显示不出来
registry.addInterceptor(new LoginHandlerInterceptor())
.addPathPatterns("/**")
.excludePathPatterns("/index.html","/","/user/login/**","/css/**","/js/**","/img/**");
}
3、我们然后在后台主页,获取用户登录的信息
<!--后台主页显示登录用户的信息-->
[[${session.loginUser}]]
然后我们登录测试拦截器是否有效~
这样我们的登录功能就实现了