一文搞懂SpringSecurity---[Day06]内置访问控制方法解析/角色权限判断

一文搞懂SpringSecurity---[Day06]内置访问控制方法解析/角色权限判断

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

内置访问控制方法

Spring Security 匹配了 URL 后调用了 permitAll() 表示不需要认证,随意访问。在Spring Security中提供了多 种内置控制。

permitAll()

permitAll()表示所匹配的 URL 任何人都允许访问。

image.png

authenticated()

authenticated()表示所匹配的 URL 都需要被认证才能访问。

image.png

anonymous()

anonymous()表示可以匿名访问匹配的URL。和permitAll()效果类似,只是设置为anonymous()的 url 会执行 filter 链中

image.png

denyAll()

denyAll()表示所匹配的 URL 都不允许被访问。

image.png

rememberMe()

“remember me”的用户允许访问

image.png

fullyAuthenticated()

刚好和上面的相反, 如果用户不是被remember me 的,才可以访问。

image.png

角色权限判断

除了之前讲解的内置权限控制。Spring Security中还支持很多其他权限控制。

这些方法一般都用于用户已经被认 证后,判断用户是否具有特定的要求。

hasAuthority(String)

判断用户是否具有特定的权限,用户的权限是在自定义登录逻辑中创建 User 对象时指定的。下图中 adminnormal 就是用户的权限。dminnormal严格区分大小写。

image.png

image.png

在配置类中通过hasAuthority(“admin”)设置具有 admin 权限时才能访问。

.antMatchers("/main1.html").hasAuthority("admin")
hasAnyAuthority(String ...)

如果用户具备给定权限中某一个,就允许访问。 下面代码中由于大小写和用户的权限不相同,所以用户无权访问

.antMatchers("/main1.html").hasAnyAuthority("adMin","admiN")
hasRole(String)

如果用户具备给定角色就允许访问。否则出现 403。

参数取值来源于自定义登录逻辑 UserDetailsService实现类中创建 User 对象时给User赋予的授权。

在给用户赋予角色时角色需要以: ROLE_开头 ,后面添加角色名称。

  • 例如:ROLE_abc 其中 abc 是角色名,ROLE_是固定的字符开头。

使用hasRole()时参数也只写 abc即可。否则启动报错。

给用户赋予角色:

image.png

在配置类中直接写 abc 即可。

.antMatchers("/main1.html").hasRole("abc")

角色判断/IP地址判断

hasAnyRole(String ...)

如果用户具备给定角色的任意一个,就允许被访问

hasIpAddress(String)

如果请求是指定的 IP 就运行访问。 可以通过

request.getRemoteAddr()获取 ip 地址。

需要注意的是在本机进行测试时 localhost 和 127.0.0.1 输出的 ip地址是不一样的。

当浏览器中通过 localhost 进行访问时控制台打印的内容:

image.png

当浏览器中通过 127.0.0.1 访问时控制台打印的内容:

image.png

当浏览器中通过具体 ip 进行访问时控制台打印内容:

image.png

.antMatchers("/main1.html").hasIpAddress("127.0.0.1")
​

 由此可见, 差异还是蛮大的. 

猜你喜欢

转载自juejin.im/post/7117451596799148040
今日推荐