天天看点

【spring系列】spring security(2)开发实践

​ 之前了解了如何快速引如spring security进行项目的权限控制,但是在实际过程中业务要复杂很多。此来了解spring security实战开发实例。

1.自定义过滤

2.成功与异常之后自定义处理

3.自定义登录-短信登录

3.1创建短信登录token

3.2 创建短信登录Filter

3.3创建短信Provider

3.4配置短信Filter

4.登录前验证

5.session共享

5.注销登录

​ 并不是所有的请求都需要权限验证,需要有的请求取消权限验证。

如此可以完成某些请求不需要验证。

注:hasRole这个是在<code>UserDetailsService</code>的实现中进行授权的。但是权限信息默认会有<code>ROLE_</code>作为开头。

一般前后端分离的时候,后端是没有页面的,如果有各种异常操作,只需要返回状态码即可

SimpleUrlAuthenticationFailureHandler请求失败处理类,在<code>spring security</code>认证失败后会进入此类,在此类中可以自定义认证失败逻辑。前后端分离时可进行自定义异常返回。

SavedRequestAwareAuthenticationSuccessHandler请求成功处理类。<code>spring security</code>在请求成功时,会进入这里,可以自定义返回用户信息。

写好成功和失败的逻辑之后进行配置。

成功登陆之后返回:

{“authorities”:[{“authority”:“ROLE_admin”}],“details”:{“remoteAddress”:“0:0:0:0:0:0:0:1”,“sessionId”:“9D02A1032740267FC1392647ADF31166”},“authenticated”:true,“principal”:{“password”:null,“username”:“admin”,“authorities”:[{“authority”:“ROLE_admin”}],“accountNonExpired”:true,“accountNonLocked”:true,“credentialsNonExpired”:true,“enabled”:true},“credentials”:null,“name”:“admin”}

成功和失败时候有自定义处理器还有自定义跳转<code>successForwardUrl</code>和<code>failureForwardUrl</code>可根据场景进行选择

默认的表单登录是无法满足我们的需求,比如登录地址修改,登录成功之后返回json。

短信登录

token是用来存储用户信息的。

这个就类似<code>UsernamePasswordAuthenticationFilter</code>主要是拦截请求到此。

设置路径为<code>/auth/mobile</code>的<code>get</code>请求到此filter。

短信登录逻辑写好之后,将短信登录的逻辑进行配置。使它生效。

修改<code>ExampleSecurityConfig</code>

<code>spring security</code>是很多的Filter组成的,我们可以在Filter链上进行添加自己的Filter。比如在输入账号密码前输入手机验证码或者图片验证码。

创建验证Filter

配置此Filter在短信验证Filter之前。

​ 其实短信验证码验证逻辑写在短信登录Filter中也可以。但是随着业务逻辑的逐渐复杂,如果普通账号密码登录也需要验证码时,就需要单独提取出来一个Filter进行验证,防止代码冗余。

单机情况下session几乎不需要处理,若多个服务的时候,就要实现session共享。

redis实现session共享

添加redis依赖

添加redis配置信息

直接复制走即可

配置好之后,启动redis,通过登录,登录完成之后redis如果有<code>spring:session</code>开头的key,证明session共享成功。

【spring系列】spring security(2)开发实践

登录成功之后需要保存session,注销登录需要把session进行清理

注销地址修改

默认注销登录的地址是<code>/logout</code>,修改注销地址。

注销成功之后可以自定义处理<code>logoutSuccessUrl</code>或者<code>logoutSuccessHandler</code>,从名字上可以看出来,一个是跳转地址,一个是实现处理器。

注销成功处理器。

<code>/mylogout</code>地址默认的可能是POST请求,如果浏览器直接访问可能访问不成功。如此配置即可

上一篇: CSS3 字体