- 浏览: 194102 次
- 性别:
- 来自: 南京
文章分类
最新评论
前言:
在日常应用的权限系统中,一个角色包含其他角色是一个很常见的需求。例如,在一个应用中如果有两个角色 admin和user,我们会希望所有user用户能做的事admin用户都可以做。为了实现这样的功能,我们可以把所有需要user用户访问的资源再赋一遍权限给admin用户,但是当我们的应用系统中有很多的角色时,这样的设计将变的极其复杂。所以srpng给我们提供了另一种实现方式,让我们很容易的可以把一种角色的权限赋给了另一角色。
环境:
spring-boot 版本:1.5.4.RELEASE
1.项目结构
2.配置类SecurityConfig.java
在配置中我们定义了两种角色ROLE_ADMIN和ROLE_USER,分别赋予了两个用户admin和user,接着我们把/admin/目录下的资源限制为有ADMIN权限的用户才能访问,其他目录下的都需要USER权限。
3.权限继承关系配置类SecurityConfiguration.java
ROLE_ADMIN > ROLE_USER 代表ADMIN角色包含USER角色
4.启动类SecurityRoleHierarchyApp.java
5.项目的pom.xml
6.admin页面 admin.html
user页面 user.html
7.启动项目
选中启动类,选择 Run As->Java application,启动后在浏览器中输入
http://localhost:8080/admin/admin.html
之后我们会被重定向到login页面
输入用户名:admin 和密码:password,我们就会看到admin页面
之后我们再在浏览器中输入http://localhost:8080/user/user.html,也能正常访问
我们清除器记录,再重新访问http://localhost:8080/user/user.html,之后再次重定向到login页面,输入用户名:user和密码:password,就会看到user页面,但是再在浏览器中输入http://localhost:8080/admin/admin.html,会出现403页面
下载源码
在日常应用的权限系统中,一个角色包含其他角色是一个很常见的需求。例如,在一个应用中如果有两个角色 admin和user,我们会希望所有user用户能做的事admin用户都可以做。为了实现这样的功能,我们可以把所有需要user用户访问的资源再赋一遍权限给admin用户,但是当我们的应用系统中有很多的角色时,这样的设计将变的极其复杂。所以srpng给我们提供了另一种实现方式,让我们很容易的可以把一种角色的权限赋给了另一角色。
环境:
spring-boot 版本:1.5.4.RELEASE
1.项目结构
2.配置类SecurityConfig.java
/** * */ package falcon.chengf.security.samples.javaconfig.rolehierarchy; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; /** * @author: 作者: chengaofeng * @date: 创建时间:2018-01-16 19:32:47 * @Description: TODO * @version V1.0 */ @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { @Autowired public void auth(AuthenticationManagerBuilder auth) throws Exception { auth.inMemoryAuthentication() .withUser("admin").password("password").authorities("ROLE_ADMIN").and() .withUser("user").password("password").authorities("ROLE_USER"); } @Override protected void configure(HttpSecurity http) throws Exception { http.csrf().disable() .authorizeRequests() .antMatchers("/admin/**").hasRole("ADMIN") .anyRequest().hasRole("USER") .and() .formLogin() .permitAll(); } }
在配置中我们定义了两种角色ROLE_ADMIN和ROLE_USER,分别赋予了两个用户admin和user,接着我们把/admin/目录下的资源限制为有ADMIN权限的用户才能访问,其他目录下的都需要USER权限。
3.权限继承关系配置类SecurityConfiguration.java
/** * */ package falcon.chengf.security.samples.javaconfig.rolehierarchy; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.security.access.hierarchicalroles.RoleHierarchy; import org.springframework.security.access.hierarchicalroles.RoleHierarchyImpl; /** * @author: 作者: chengaofeng * @date: 创建时间:2018-01-27 17:34:10 * @Description: TODO * @version V1.0 */ @Configuration public class SecurityConfiguration { @Bean public RoleHierarchy roleHierarchy() { RoleHierarchyImpl roleHierarchy = new RoleHierarchyImpl(); roleHierarchy.setHierarchy("ROLE_ADMIN > ROLE_USER"); return roleHierarchy; } }
ROLE_ADMIN > ROLE_USER 代表ADMIN角色包含USER角色
4.启动类SecurityRoleHierarchyApp.java
package falcon.chengf.security.samples.javaconfig.rolehierarchy; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; /** * Hello world! * */ @SpringBootApplication public class SecurityRoleHierarchyApp { public static void main( String[] args ) { SpringApplication.run(SecurityRoleHierarchyApp.class, args); } }
5.项目的pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>falcon.chengf</groupId> <artifactId>security-samples-javaconfig-rolehierarchy</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>security-samples-javaconfig-rolehierarchy</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.4.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-config</artifactId> </dependency> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-web</artifactId> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> <configuration> <mainClass>${start-class}</mainClass> </configuration> </plugin> </plugins> </build> </project>
6.admin页面 admin.html
<!DOCTYPE html> <html> <head> <title>Static</title> <meta name="viewport" content="width=device-width, initial-scale=1.0"> </head> <body> hello, admin! </body> </html>
user页面 user.html
<!DOCTYPE html> <html> <head> <title>Static</title> <meta name="viewport" content="width=device-width, initial-scale=1.0"> </head> <body> hello user! </body> </html>
7.启动项目
选中启动类,选择 Run As->Java application,启动后在浏览器中输入
http://localhost:8080/admin/admin.html
之后我们会被重定向到login页面
输入用户名:admin 和密码:password,我们就会看到admin页面
之后我们再在浏览器中输入http://localhost:8080/user/user.html,也能正常访问
我们清除器记录,再重新访问http://localhost:8080/user/user.html,之后再次重定向到login页面,输入用户名:user和密码:password,就会看到user页面,但是再在浏览器中输入http://localhost:8080/admin/admin.html,会出现403页面
下载源码
发表评论
-
spring-security(二十五)鉴权
2018-03-27 11:21 1601前言 本文将详细探讨spring security中的鉴权 ... -
test
2018-03-19 21:20 0什么是服务发现 ... -
spring-security(二十四)CSRF
2018-03-24 09:54 81641.什么是CSRF攻击 下面我们以一个具体的例子来说明这种常见 ... -
spring-security(二十三)Remember-Me认证
2018-03-09 21:06 1341前言: Remember-me认证方式指的是能在不同的会话 ... -
spring-security(二十二)基本认证和摘要认证
2018-03-06 16:58 1804前言: 在web应用中,非常流行以基本认证和摘要认证作为备 ... -
spring-security(二十一)核心Filter-UsernamePasswordAuthenticationFilter
2018-03-04 11:05 1241一、UsernamePasswordAuthenticatio ... -
spring-security(二十)核心Filter-SecurityContextPersistenceFilter
2018-02-28 21:40 1132一、SecurityContextPersistenceFil ... -
spring-security(十九)核心Filter-ExceptionTranslationFilter
2018-02-27 16:31 2064前言: 在spring的安全 ... -
spring-security(十八)核心Filter-FilterSecurityInterceptor
2018-02-25 10:59 2350前言: 当用spring secur ... -
spring-security(二十六)整合CAS 实现SSO
2018-04-05 18:09 12461.cas 认证流程 2.spring security ... -
spring-security(十七)Filter顺序及简介
2018-02-22 18:16 7904前言: spring security在 ... -
spring-security(十六)Filter配置原理
2018-02-21 15:18 2387前言: spring security最常见的应用场景还是 ... -
spring-security(十五) Password编码
2018-02-19 15:15 1228前言: 在实际应用中 ... -
spring-security(十四)UserDetailsService
2018-02-19 11:35 1476前言: 作为spring security的核心类,大多数 ... -
spring-security(十三)核心服务类
2018-02-18 16:46 1419前言: 在之前的篇章中我们已经讲述了spring secu ... -
spring-security(十二)鉴权方式概述
2018-02-18 10:42 2527前言: 本文主要讲述在spring security鉴权的 ... -
spring-security(十一)Web应用认证过程
2018-02-17 17:17 1239前言: 本文将探讨当 ... -
spring-security(十)基本认证过程
2018-02-17 13:55 2108前言: 在spring security中认证具体指的是什 ... -
spring-security(九)-核心组件
2018-02-17 10:46 870前言: 本文主要介绍在spring security中的几 ... -
spring-security(八)java config-sample之cas client
2018-02-16 11:26 2071前言: SSO英文全称Single Sign On,单点登 ...
相关推荐
1. `SecurityConfig`类:这是Spring Security的核心配置类,它定义了哪些URL应该被保护,以及未授权访问时的行为。例如,可以使用`http.authorizeRequests()`来定义访问规则,如`antMatchers("/admin/**").hasRole(...
`springsecurity-sample.rar` 可能包含一个示例项目,展示如何集成 Spring Security 并进行基本配置。这个样本项目可能包括以下部分: 1. **SecurityConfig**: 定义安全规则的 Java 类,可能使用 `@...
【标签】"Java"表明该项目是用Java语言编写的,同时也暗示了所使用的Spring Security框架是Java生态系统的一部分,而CAS Server也是以Java为基础的开源身份验证协议实现。 【压缩包子文件的文件名称列表】"cas4-...
在描述中提到,Acegi 1.0.3与Spring 1.2.8版本兼容,可以通过解压`acegi-security-sample-tutorial.war`文件来获取相关的依赖库。 在Spring-Acegi中,`MethodSecurityInterceptor`是关键组件,它拦截并处理具有安全...
例如,我们可以创建一个SecurityConfig类,使用`@EnableWebFluxSecurity`和`@Override`方法来自定义安全规则。 总的来说,sample-gateway-oauth2login项目展示了Spring Cloud Gateway与Spring Security OAuth2的...
在Acegi 1.0.3版本中,示例教程war包`acegi-security-sample-tutorial.war`与Spring 1.2.8版本兼容,这表明在使用Acegi时,我们需要确保正确版本的Spring库被引入到项目中。 在实现登录成功后的登出功能时,我们...
4. **Spring Security配置**: 需要自定义`SecurityConfig`类,使用`@EnableWebSecurity`开启Web安全,并配置`HttpSecurity`来定义授权规则。例如,可以使用`http.authorizeRequests()`和`.antMatchers().permitAll()...
然后,我们可以自定义安全配置,创建一个`SecurityConfig`类并扩展`WebSecurityConfigurerAdapter`。 2. **身份验证**:Spring Security支持多种身份验证方式,包括用户名/密码、OAuth2、JWT等。在这个例子中,我们...
"SpringBoot-ConfigServer-Sample-master"文件可能包含以下内容: 1. **源代码**:Spring Boot Cloud Config Server 和 客户端应用的源代码,展示如何在实际项目中设置和使用。 2. **配置文件**:Git仓库中的配置...
了解了这些核心概念后,你可以通过`springsecurity-sample`项目中的代码实践,进一步熟悉Spring Security的配置和使用。这个项目可能包含了一个简单的Spring Boot应用,其中已经集成了Spring Security,并提供了一些...
Springboot学习示例 博客文章链接 (15)Spring Boot2.0 和邮件 (16)Spring Boot2.0 整合Spring Security (17)Spring Boot2.0 整合Shiro (18)Spring Boot2.0 与监控管理
您必须提供一个名为jasypt.encryptor.password的环境变量,其值为sample-password以在应用程序启动期间解密数据库密码。 启动后, http://localhost:8080显示基本的应用程序信息。 春云配置 所有客户端应用程序都...
XFire是Apache CXF项目的一个前身,它提供了一套完整的工具集,包括一个轻量级SOAP引擎、一个JAXB绑定器、一个StAX解析器和一套基于Spring的集成框架。XFire的主要目标是提供一种简单、高性能的方式来实现Web服务,...
Apache Shiro 是一款轻量级的安全框架,与 Spring Security 相比,它的使用更为简单,但功能同样强大。Shiro 提供了丰富的安全控制,包括身份验证、授权、会话管理和安全加密等。在单点登录(Single Sign-On,SSO)...