?
?
一、创建项目并导入依赖
?
?
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
?
?
?
?
二、相关配置和代码
?
?
2.1)application.properties配置密码
?
?
注:我这里从简,可以先去看https://www.cnblogs.com/fernfei/p/12185186.html如何配置密码
?
?
spring.security.user.name=admin
spring.security.user.password=123
?
?
2.2)创建自定义的身份过滤类
?
?
?
?
2.3)写json登陆之前先看一下源码,了解一下它是如何表单登录的
?
?
2.3.1)在Idea中连按连下shift键,搜索UsernamePasswordAuthenticationFilter类
?
?
?
?
2.3.2)进入后再按Ctrl+F12可以查看该类的所有方法
?
?
?
?
2.3.3)进入方法
?
?
?
?
?
?
2.3.4)我们只需要在request.getParameter()那里重写一下不就可以实现json登陆
?
?
重写attemptAuthentication(HttpServletRequestrequest,HttpServletResponseresponse)方法
?
?
只需要复制父类的方法,多加一个判断json的方法。就能同时支持key-value形式可json形式的参数了
?
?
?
?
?
?
3)创建SecurityConfig配置类
?
?
?
?
注:自定义的过滤类和security原来那个表单登陆过滤设置是分开的
?
?
体现在filter.setFilterProcessesUrl()和loginProcessingUrl
因此表单登陆和json登陆的,successHandler判断也要分开写,
一会下面有效果图也可以印证这一点
?
?
?
?
4)创建controller
?
?
?
?
?
?
三、效果图
?
?
?
?
测试工具PostMan
?
?
访问被保护的hello路径
?
?
?
?
json登陆
?
?
?
?
表单登陆
?
?
?
?
由此证明这俩个登陆的配置要分开设置
原文地址:https://www.cnblogs.com/fernfei/p/12204054.html