本文主要实现:
基于数据库的用户登录认证授权(基于内存的没研究)
基于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写死的。
静态资源结构:
如果有什么问题或者有什么可以简化的地方,可以在下面评论
还没有评论,来说两句吧...