SpringBoot日记——登录与拦截器篇
之前的文章我们把登录页写了出来,但是想要让登录现实他的基本功能,要如何做呢?本篇文章就来帮你实现第一步,让登录页对账号密码做校验,并且完成登录跳转。
LoginController
1. 要实现登录,我们需要先编写一个登录的controller类:(每一步的注释应该比较详细了~)
@Controller
public class LoginController { // 发送post请求,代替了RequestMapping(value="/user/login", method="post")
@PostMapping(value = "/user/login")
// 对登录请求判断request的参数值,并存放在map中
public String login(@RequestParam("username") String username,
@RequestParam("password") String password,
Map<String, Object> map) {
// 我们判断,如果登录名不是空,并且,密码是 123456 就登录成功(暂不涉及数据库)
if (!StringUtils.isEmpty(username) && "123456".equals(password)) {
// 登录成功,就跳转到下一个页面
return "dashboard";
} else {
// 登录失败,刷新本登录页
map.put("msg", "用户名密码错误");
return "login";
}
} }
为了开发方便,我们还可以将application.properties中添加一个 禁用缓存的参数: spring.thymeleaf.cache=fasle ,这样html页面有改动的时候,我们只需要用快捷键crtl+F9或者点击如图的编译按钮,重新编译下就可以在页面看结果,而不需要再次启动Tomcat服务了。

这时候访问页面,会报错,是因为我们没有在html页面中将类中的参数放进去,所以找不到我们需要的值,那么……
2. 校验页面
先来看,没有配置html页时访问的情况,表示完全没有关联或者获取的页面的数据;

然后我们添加下方参数配置再看,若只添加action和method,会是神马情况:(表示String的参数username不存在)

最后看添加了所有参数后的情况,我们在最后看一下;
login.HTML
我们来看html页要如何修改呢?
来看,我图中标记的地方,就是需要添加的东西:
1. 首先添加th:action,告诉模板,我们要跳转的请求是user/login,而且是post请求的;
2.告诉模板,我们的参数名称是username和password,这也是controller类中设定的参数值,要完全一致。

3.注意,我们之前说如果账号密码不对,要有个msg提示,可这msg在模板中并没有表现,所以,我们要在html中添加一段关于msg的判断:如果msg是空,就不展示mgs,如果不为空就展示:
看,我在下方还用到了th:if语句,这个在官方文档中有记录如何使用,而且优先级比较高,所以会优先判断这个方法是否生效,然后才展示text。
<p style="color: red;" th:text="${msg}" th:if="${not #strings.isEmpty(msg)}"></p>
好,接下来我们试一下,是否成功了,先输入账号admin,密码111,点击登录,看跳转是否依然还是login页:

然后来看,账号admin,密码123456,是否跳转到下一页中:

我们的跳转是成功的,只是样式有些问题,稍后,我们来看怎么处理。
试图映射与重定向
跳转没问题了,可是还有另一个问题,当我们进入到跳转页以后,按F5刷新页面,会发现,页面提示:问是否需要重新提交表单,那么为了不重复提交表单,我们需要这样配置。
1. 首先在我们之前的LoginController类中添加映射:(修改return ,将我们的请求定向到另一个路径,而非/user/login)
if (!StringUtils.isEmpty(username) && "123456".equals(password)) {
// 登录成功,就跳转到下一个页面
// 重定向URL
return "redirect:/main.html";
2.然后在之前的MyMvcConfig中添加一下映射的路径,让上边的main.html引到我们想要跳转的那个“dashboard”页。
registry.addViewController("/main.html").setViewName("dashboard");
3. 再来用正确的账号密码登录一下,查看我们修改的东西是否生效了,注意看url和页面:

很棒,效果和我们想的基本一样,那么这还没完,一个完整的登录还有其他的问题,比如我们把这个url复制到其他浏览器会是什么样子的?
依然能访问成功,那我们做登录还有卵用,所以这个时候,拦截器的作用就体现出来了。
拦截器
首先,了解一下拦截器的作用,他是用来做登录检查的,也就是没有前边的登录,就不可以访问后边的页面。
如何实现,来看:
1. 先添加一个拦截器,我们新建一个登录的拦截器在component包下,名字就叫 LoginHandlerInterceptor (实现接口HandlerInterceptor),IDEA编译器,我们按ctrl+O,把需要用到的三个接口都拉出来,然后开始编写:
/**
* 拦截器,登录检查
*/ public class LoginHandlerInterceptor implements HandlerInterceptor {
// 目标方法执行之前
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
Object user = request.getSession().getAttribute("loginUser");
// 如果获取的request的session中的loginUser参数为空(未登录),就返回登录页,否则放行访问
if (user == null) {
// 未登录,给出错误信息,
request.setAttribute("msg","无权限请先登录");
// 获取request返回页面到登录页
request.getRequestDispatcher("/index.html").forward(request, response);
return false;
} else {
// 已登录,放行
return true;
}
} @Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { } @Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { }
}
2. 上边配置的session需要取值才能做判断,那么我们需要在controller中设置这个session值,以让它生效:

3. 之前说过,要让登录有个拦截器的功能,就是除了访问首页我们可以,其他未登录的都拦截下来,所以,需要在MyMvcConfig中添加一个拦截器,让上边的配置都有作用:
// 注册拦截器
@Override
public void addInterceptors(InterceptorRegistry registry) {
// 添加拦截的请求,并排除几个不拦截的请求
registry.addInterceptor(new LoginHandlerInterceptor()).addPathPatterns("/**")
.excludePathPatterns("/index.html", "/", "/user/login");
}
这样,除了首页的请求意外,其他请求都会被拦截下来,我们再看这样配置以后的效果:
当我们直接访问localhost:8080/main.html时:

这时候,就只能通过拦截器排除的那几个请求来访问和登录后才能正常访问了
SpringBoot日记——登录与拦截器篇的更多相关文章
- SpringBoot整合Mybatis完整详细版二:注册、登录、拦截器配置
接着上个章节来,上章节搭建好框架,并且测试也在页面取到数据.接下来实现web端,实现前后端交互,在前台进行注册登录以及后端拦截器配置.实现简单的未登录拦截跳转到登录页面 上一节传送门:SpringBo ...
- taotao用户登录springMVC拦截器的实现
在springMVC中写拦截器,只需要两步: 一.写 java 拦截器类,实现 interceptor 拦截器接口. 二.在 springMVC 的xml配置文件中,配置我们创建的拦截器对象及其拦截目 ...
- 4_4.springboot之Web开发登录和拦截器
1.登录处理 1).禁用模板引擎的缓存 # 禁用缓存 spring.thymeleaf.cache=false 2).页面修改完用ctrl+f9:重新编译: LoginController @Cont ...
- Springboot:员工管理之登录、拦截器(十(4))
1:构建登录javaBean com\springboot\vo\LoginUser.java package com.springboot.vo; import lombok.Data; @Data ...
- SpringBoot从零单排 ------ 拦截器的使用
在项目开发中我们常常需要对请求进行验证,如登录校验.权限验证.防止重复提交等等,通过拦截器来过滤请求.自定义一个拦截器需要实现HandlerInterceptor接口.代码如下: import org ...
- 如何在SpringBoot项目中使用拦截器
相比springmvc,springboot中拦截器不需要在xml中配置,只需定义拦截器类 implements HandlerInterceptor 和拦截器拦截路径的配置类extends WebM ...
- SpringBoot静态资源访问+拦截器+Thymeleaf模板引擎实现简单登陆
在此记录一下这十几天的学习情况,卡在模板引擎这里已经是四天了. 对Springboot的配置有一个比较深刻的认识,在此和大家分享一下初学者入门Spring Boot的注意事项,如果是初学SpringB ...
- Java 过滤器实现(登录) + 拦截器(两种方法)
以下是实现未登录不能进入页面的实现 使用了thyemeleaf+SpringBoot+过滤器实现的,过滤器的核心代码如下: @Component @WebFilter(filterName = &qu ...
- springboot(五).如何在springboot项目中使用拦截器
在每个项目中,拦截器都是我们经常会去使用的东西,基本上任一一个项目都缺不了拦截器的使用. 如日志记录.登录验证,session验证等,都需要拦截器来拦截URL请求,那springboot中的拦截器是如 ...
随机推荐
- springmvc处理日期格式
解决http400错误 通常有两个来源: 1 页面的下拉列表中传入了字符串,而服务器需要的是Integer类型的,所以服务器拒绝. 2, 浏览器传给服务器端的日期格式字符串,服务器端理解不了,所以需要 ...
- 微信小程序websocket
微信小程序websocket 微信小程序带有websocket可以提供使用,但是官方文档写的东西很少,而且小程序后台能力弱这一点也是十分的坑爹,这就导致了socket长连接一切后台就会出现断开的情况, ...
- Maven实战系列文章目录
Maven实战(一)安装与配置 Maven实战(二)构建简单Maven项目 Maven实战(三)Eclipse构建Maven项目 Maven实战(四)生命周期 Maven实战(五)坐标详解 Maven ...
- 【错误记录】uwsgi 启动 flask 出错
在测试环境使用uwsgi启动flask未成功 正常报错信息: *** Starting uWSGI 2.0.13.1 (64bit) on [Fri Sep 23 09:27:47 2016] *** ...
- [转]Linux下查看CPU信息、机器型号等硬件信息
From: http://www.jbxue.com/LINUXjishu/14582.html 查看CPU信息(型号) : # cat /proc/cpuinfo | grep name | cut ...
- IDEA 使用技巧 Update
IDEA使用起来和Eclipse很大区别. 1.快捷键. 因为一个个熟悉起来费时间,就直接在Preferences—keymap里选择了Eclipse OS X,这样快捷键就转换到了Mac下Eclip ...
- mkdirp——递归创建目录及其子目录
如果要创建目录A并创建目录A的子目录B,没有用-p参数的情况下mkdir会逐个创建目录(mkdir A; mkdir A/B); 加上参数-p就可以直接创建2个目录mkdir -p A/B( 如果目录 ...
- 有料面试题之--Object里面的方法
阿里的面试题里面有个题很奇妙:你知道Object类里面有哪些方法吗? 绝大部分猿类都知道 有hashcode .equals .clone.toString 只有部分人会回答有 wait和notify ...
- linux下如何实现mysql数据库每天自动备份定时备份
版权声明:本文为 testcs_dn(微wx笑) 原创文章,非商用自由转载-保持署名-注明出处,谢谢. 目录(?)[+] 概述 备份是容灾的基础,是指为防止系统出现操作失误或系统故障导致数 ...
- 20155314 2016-2017-2 《Java程序设计》实验二 Java面向对象程序设计
20155314 2016-2017-2 <Java程序设计>实验二 Java面向对象程序设计 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UM ...