Spring Security-内置访问控制方法介绍和角色权限判断

简介: Spring Security-内置访问控制方法介绍和角色权限判断

一、内置访问控制方法介绍


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


1.permitAll()


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


image.png

2.authenticated()


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


image.png

3.anonymous()


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


官方源码定义如下:


image.png

4.denyAll()


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


image.png

5.rememberMe()


被“remember me”的用户允许访问


image.png

6.fullyAuthenticated()


如果用户不是被remember me的,才可以访问。


image.png



二、角色权限判断


除了之前讲解的内置权限控制。Spring Security中还支持很多其他权限控制。这些方法一般都用于用户已经被认证后,判断用户是否具有特定的要求。


1.hasAuthority(String)


判断用户是否具有特定的权限,用户的权限是在自定义登录逻辑中创建User对象时指定的。


下图中admin就是用户的权限。admin严格区分大小写。


image.png

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


.antMatchers(**"/main1.html"**).hasAuthority(**"admin"**)
复制代码


2.hasAnyAuthority(String ...)


如果用户具备给定权限中某一个,就允许访问。


下面代码中由于大小写和用户的权限不相同,所以用户无权访问/main1.html


.antMatchers("/main1.html").hasAnyAuthority("adMin","admiN")
复制代码


3.hasRole(String)


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


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


在给用户赋予角色时角色需要以:ROLE_ 开头,后面添加角色名称。例如:ROLE_abc 其中abc是角色名,ROLE_是固定的字符开头。使用hasRole()时参数也只写abc即可。否则启动报错。


给用户赋予角色:

image.png

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

image.png

4.hasAnyRole(String ...)


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


5.hasIpAddress(String)


如果请求是指定的IP就运行访问。


可以通过request.getRemoteAddr()获取ip地址。


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


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


image.png

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

image.png

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

image.png

使用Spring Security时经常会看见403(无权限),默认情况下显示的效果如下:


image.png

而在实际项目中可能都是一个异步请求,显示上述效果对于用户就不是特别友好了。Spring Security支持自定义权限受限。



相关文章
|
11月前
|
JSON 安全 Java
什么是JWT?如何使用Spring Boot Security实现它?
什么是JWT?如何使用Spring Boot Security实现它?
1906 5
|
8月前
|
安全 Java Apache
微服务——SpringBoot使用归纳——Spring Boot中集成 Shiro——Shiro 身份和权限认证
本文介绍了 Apache Shiro 的身份认证与权限认证机制。在身份认证部分,分析了 Shiro 的认证流程,包括应用程序调用 `Subject.login(token)` 方法、SecurityManager 接管认证以及通过 Realm 进行具体的安全验证。权限认证部分阐述了权限(permission)、角色(role)和用户(user)三者的关系,其中用户可拥有多个角色,角色则对应不同的权限组合,例如普通用户仅能查看或添加信息,而管理员可执行所有操作。
394 0
|
12月前
|
安全 网络安全 数据安全/隐私保护
访问控制列表(ACL)是网络安全中的一种重要机制,用于定义和管理对网络资源的访问权限
访问控制列表(ACL)是网络安全中的一种重要机制,用于定义和管理对网络资源的访问权限。它通过设置一系列规则,控制谁可以访问特定资源、在什么条件下访问以及可以执行哪些操作。ACL 可以应用于路由器、防火墙等设备,分为标准、扩展、基于时间和基于用户等多种类型,广泛用于企业网络和互联网中,以增强安全性和精细管理。
1699 7
|
7月前
|
缓存 安全 Java
深入解析HTTP请求方法:Spring Boot实战与最佳实践
这篇博客结合了HTTP规范、Spring Boot实现和实际工程经验,通过代码示例、对比表格和架构图等方式,系统性地讲解了不同HTTP方法的应用场景和最佳实践。
655 5
|
7月前
|
Java Spring 容器
两种Spring Boot 项目启动自动执行方法的实现方式
在Spring Boot项目启动后执行特定代码的实际应用场景中,可通过实现`ApplicationRunner`或`CommandLineRunner`接口完成初始化操作,如系统常量或配置加载。两者均支持通过`@Order`注解控制执行顺序,值越小优先级越高。区别在于参数接收方式:`CommandLineRunner`使用字符串数组,而`ApplicationRunner`采用`ApplicationArguments`对象。注意,`@Order`仅影响Bean执行顺序,不影响加载顺序。
541 2
|
9月前
|
人工智能 自然语言处理 Java
Spring 集成 DeepSeek 的 3大方法(史上最全)
DeepSeek 的 API 接口和 OpenAI 是兼容的。我们可以自定义 http client,按照 OpenAI 的rest 接口格式,去访问 DeepSeek。自定义 Client 集成DeepSeek ,可以通过以下步骤实现。步骤 1:准备工作访问 DeepSeek 的开发者平台,注册并获取 API 密钥。DeepSeek 提供了与 OpenAI 兼容的 API 端点(例如),确保你已获取正确的 API 地址。
Spring 集成 DeepSeek 的 3大方法(史上最全)
|
11月前
|
Java Spring
【Spring】方法注解@Bean,配置类扫描路径
@Bean方法注解,如何在同一个类下面定义多个Bean对象,配置扫描路径
381 73
|
8月前
|
数据安全/隐私保护
课时105:访问控制权限
面向对象开发的三大特点为封装、继承和多态。封装涉及属性和结构的封装及访问权限控制,主要通过四种访问修饰符实现:Private、Default、Protected 和 Public。继承围绕接口展开,多态实现参数统一。封装中,属性定义用 Private,方法定义用 Public,可解决大部分设计问题。示例代码展示了不同包中的类如何通过 Protected 访问父类属性。
105 1
|
12月前
|
安全 网络安全 数据安全/隐私保护
访问控制列表(ACL)是网络安全管理的重要工具,用于定义和管理网络资源的访问权限。
访问控制列表(ACL)是网络安全管理的重要工具,用于定义和管理网络资源的访问权限。ACL 可应用于路由器、防火墙等设备,通过设定规则控制访问。其类型包括标准、扩展、基于时间和基于用户的ACL,广泛用于企业网络和互联网安全中,以增强安全性、实现精细管理和灵活调整。然而,ACL 也存在管理复杂和可能影响性能的局限性。未来,ACL 将趋向智能化和自动化,与其他安全技术结合,提供更全面的安全保障。
875 4

热门文章

最新文章