springboot整合spring security

本文主要实现:

基于数据库的用户登录认证授权(基于内存的没研究)

基于cookie的remember me记住我的功能

先上代码,再说明:

maven:

其中验证码用的google code kaptcha,需要自己去maven仓库下载jar包install进自己的仓库,直接用maven配置是无法下载的

-- 安全框架 Spring Security --

dependency

groupIdorg.springframework.boot/groupId

artifactIdspring-boot-starter-security/artifactId

/dependency

dependency

groupIdcom.google.code.kaptcha/groupId

artifactIdkaptcha/artifactId

version./version

/dependency

spring security需要自定义的类比较多,请耐心看完。。。

1、UserDetails

根据前端传过来的用户名,从数据库中查处对应数据,然后再封装成这个类

* 功能描述:自定义spring security中,用于验证的用户实体类

*

userEntity

userEntity

userEntity userEntity

authorities

userEntityroleEntity authorities roleEntity

authorities

userEntity

userEntity

userEntity

userEntity

2、UserDetailsService

用于返回刚才我们自己封装的实体类

* 功能描述:自定义spring security中,用于验证的服务类

*

userService

name

userEntity userServicename

userEntity

userEntity

3、AuthenticationSuccessHandler

用于自定义认证成功后的处理逻辑

* 功能描述:认证成功处理器

*

request response authentication

response

response

4、AuthenticationFailureHandler

用于自定义认证失败时的处理逻辑

* 功能描述:认证失败处理器

*

httpServletRequest httpServletResponse e

httpServletResponsee

httpServletResponse

5、AuthenticationFilter

自定义过滤器,用于自定义验证,此处我只加了验证码验证

* 功能描述:自定义过滤器---验证码验证

*

myAuthenticationFailureHandler

httpServletRequest httpServletResponse filterChain

httpServletRequest

kaptcha httpServletRequest

kaptchaSession httpServletRequestKAPTCHA_SESSION_KEY

kaptcha kaptchaSession kaptcha kaptchaSession

myAuthenticationFailureHandlerhttpServletRequesthttpServletResponse

filterChainhttpServletRequest httpServletResponse

6、AuthenticationProvider

认证逻辑

* 功能描述:认证

*

myUserDetailsService

authenticate

token

authenticate

username token

userDetails

username

userDetails myUserDetailsServiceusername

userDetails

userDetails

userDetails

userDetails

userDetails

password userDetails

passwordtoken

userDetails password userDetails

authentication

authentication

7、WebSecurityConfigAdapter

安全控制中心,用于配置spring security

*

* 功能描述: 安全控制中心

*

*

myUserDetailsService

myAuthenticationProvider

myAuthenticationSuccessHandler

myAuthenticationFailureHandler

myKaptchaFilter

auth

authmyUserDetailsService

authmyAuthenticationProvider

http

http

myKaptchaFilter

myAuthenticationSuccessHandler

myAuthenticationFailureHandler

web

web

前端页面:

前端使用的vue + element-ui + axios

记住我

登录

 这里说明一下传参

        spring security中验证用户名密码的过滤器是UsernamePasswordAuthenticationFilter,源码如下:

SPRING_SECURITY_FORM_USERNAME_KEY

SPRING_SECURITY_FORM_PASSWORD_KEY

usernameParameter

passwordParameter

postOnly

request response

postOnly request

request

username request

password request

username

username

password

password

username username

authRequest username password

request authRequest

authRequest

request

requestpasswordParameter

request

requestusernameParameter

request authRequest

authRequestauthenticationDetailsSourcerequest

usernameParameter

usernameParameter

usernameParameter usernameParameter

passwordParameter

passwordParameter

passwordParameter passwordParameter

postOnly

postOnly postOnly

usernameParameter

passwordParameter

 可以看到,spring security是通过request.getParameter()接收的,只能接收Content-Type:application/x-www-form-urlencoded格式的数据,所以前端需要使用UrlSearchParams格式化参数

还有,前端传的“记住我”的参数的key一定是remember-me,这是spring security写死的。

静态资源结构:

如果有什么问题或者有什么可以简化的地方,可以在下面评论

以上是 springboot整合spring security 的全部内容, 来源链接: www.h5w3.com/php/706327.html

回到顶部