前端界面:
<form class="form-signin" th:action="@{/user/login}" method="post">
后端控制层:
@PostMapping("/user/login")
public String login(@RequestParam ("userName")String userName,
@RequestParam ("password")String password) {
if ("admin".equals(userName) && "123456".equals(password)) {
// 之所以这样redirect 是因为防止重复提交
return "redirect:/main";
} else {
return "index";
}
}
使用重定向来处理 同时在视图解析里面添加
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/").setViewName("login");
registry.addViewController("/login").setViewName("login");
registry.addViewController("/success").setViewName("success");
registry.addViewController("/good").setViewName("success");
registry.addViewController("/main").setViewName("dashboard");
}
这样的话 就完美解决了表单重复提交
但是又衍生出了另外一个问题: 我在浏览器中输入链接指定main的地址的话 还是可以跳转的
问题来了 就要解决 当前最简单的解决办法就是 在访问控制层的之前 我先判断下 用户是否已经登录过了呢 ?
所以 咱们加个登录拦截器 去检查用户是否登录
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new LoginInterceptors())
.addPathPatterns("/**")
.excludePathPatterns("/", "/login",
"/user/login", "/**/*.css", "/**/*.js", "/**/*.png", "/**/*.jpg",
"/**/*.jpeg", "/**/*.gif", "/**/fonts/*", "/**/*.svg");
}
解释下 :首先登录页面 咱们是不需要拦截的 对吧 然后登录请求的话 也不要拦 但是这里如果不放开静态资源的话 就会被拦截 不是说springboot会自动的放开static下的静态资源吗???? 很奇怪!!!!!
原因:springboot版本的问题 1.多的版本确实放开了静态资源 但是2.0以后的版本 就关闭了 个人感觉 放开挺好的 因为本来springboot就认为static下面是静态资源 是界面加载时所必须 那么2.0为啥还要拦截呢 搞不懂!!!!
感觉有用得话 就点个赞吧