springsecurity
很多同学在进行编程学习时缺乏系统学习的资料。本页面基于springsecurity内容,从基础理论到综合实战,通过实用的知识类文章,标准的编程教程,丰富的视频课程,为您在springsecurity相关知识领域提供全面立体的资料补充。同时还包含 safari浏览器、samba、SAMP 的知识内容,欢迎查阅!
springsecurity相关知识
-
使用SpringSecurity前几天写了一个SpringBoot对拦截器的使用,在实际项目中,对一些情况需要做一些安全验证,比如在没有登录的情况下访问特定的页面应该解释的拦截处理。这一篇介绍使用SpringSecurity来做简单的安全控制,由于SpringSecurity比较复杂,如果有不对的地方可以大家一起学习。 新建项目,前端页面使用thymeleaf,加入security依赖,pom文件如下: <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-ins
-
mall整合SpringSecurity和JWT实现认证和授权(一)SpringBoot实战电商项目mall(18k+star)地址:https://github.com/macrozheng/mall 摘要 本文主要讲解mall通过整合SpringSecurity和JWT实现后台用户的登录和授权功能,同时改造Swagger-UI的配置使其可以自动记住登录令牌进行发送。 项目使用框架介绍 SpringSecurity SpringSecurity是一个强大的可高度定制的认证和授权框架,对于Spring应用来说它是一套Web安全标准。SpringSecurity注重于为Java应用提供认证和授权功能,像所有的Spring项目一样,它对自定义需求具有强大的扩展性。 JWT J
-
仅需四步,整合SpringSecurity+JWT实现登录认证 !SpringBoot实战电商项目mall(25k+star)地址:https://github.com/macrozheng/mall 摘要 学习过我的mall项目的应该知道,mall-admin模块是使用SpringSecurity+JWT来实现登录认证的,而mall-portal模块是使用的SpringSecurity基于Session的默认机制来实现登陆认证的。很多小伙伴都找不到mall-portal的登录接口,最近我把这两个模块的登录认证给统一了,都使用SpringSecurity+JWT的形式实现。 主要是通过把登录认证的通用逻辑抽取到了mall-security模块来实现的,下面我们讲讲如何使用mall-sec
-
SpringSecurity认证流程源码讲解技术之路不进即退,无岸,又何谈回头。 从三个方面来说明 认证流程说明 认证结果如何在多个请求之间共享 获取认证用户信息 认证流程说明(SpringSecurity基本原理) springSecurity其实就是一组过滤器,绿色的过滤器是由自己控制的,可以选择它是否出现。但是其他颜色就不可以了,并且他们的顺序也是死的。在springboot启动的时候会自动的进行加载。如下图所示:在这一组过滤器中,一个块就代表着一种方式,像表单和http Basic认证。橘色的框会根据之前绿色过滤器进行相应的判断,然后抛
springsecurity相关课程
springsecurity相关教程
- 3.1 建立 Spring MVC 单元测试 import static org.springframework.security.test.web.servlet.setup.SecurityMockMvcConfigurers.*;@RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration(classes = SecurityConfig.class)@WebAppConfigurationpublic class CsrfShowcaseTests { @Autowired private WebApplicationContext context; private MockMvc mvc; @Before public void setup() { mvc = MockMvcBuilders .webAppContextSetup(context) .apply(springSecurity()) .build(); }...
- 2.1 项目的目录结构 本实例我们一共需要创建两个文件,其一是 maven 的工程描述文件 pom.xml 我们把它放在工程的根目录下;其二是 Spring Boot 项目的启动文件 HelloSecurityApplication.java。完整的目录描述如下:├── pom.xml├── src/ └── main/ └──java/ └──imooc/ └──springsecurity/ └──HelloSecurityApplication.java
- 3.2 DefaultJaasAuthenticationProvider DefaultJaasAuthenticationProvider 对象允许注入 JAAS 的相关配置,然后会用该配置创建 LoginContext 上下文,这意味着 DefaultJaasAuthenticationProvider 对象并未绑定任何的具体配置内容。JAAS 的配置对象 Configuration 有一个简单实现 InMemoryConfiguration,利用内存保存和获取配置信息。在该类的构造方法里,我们可以将配置项以 Map 的形式逐一配置进来。下面我们展示一个配置实例:使用 DefaultJaasAuthenticationProvider 和 InMemoryConfiguration。<bean id="jaasAuthProvider"class="org.springframework.security.authentication.jaas.DefaultJaasAuthenticationProvider"><property name="configuration"><bean class="org.springframework.security.authentication.jaas.memory.InMemoryConfiguration"><constructor-arg> <map> <!-- SPRINGSECURITY 是认证上下文的默认名称 --> <entry key="SPRINGSECURITY"> <array> <bean class="javax.security.auth.login.AppConfigurationEntry"> <constructor-arg value="sample.SampleLoginModule" /> <constructor-arg> <util:constant static-field= "javax.security.auth.login.AppConfigurationEntry$LoginModuleControlFlag.REQUIRED"/> </constructor-arg> <constructor-arg> <map></map> </constructor-arg> </bean> </array> </entry> </map> </constructor-arg></bean></property><property name="authorityGranters"><list> <!-- 这里可以配置我们自定义的 AuthorityGranter 实现 --> <bean class="org.springframework.security.authentication.jaas.TestAuthorityGranter"/></list></property></bean>
- 3.2 构建 OAuth2.0 客户端 3.2.1 创建 Maven 项目创建 Maven 项目,本例中 Group ID 为 imooc.tonglei0429.springsecurity,Artifact ID 为 login.oauth2.github在控制台输入以下命令:mvn archetype:generate \ -DgroupId=imooc.tonglei0429.springsecurity \ -DartifactId=login.oauth2.github \ -DarchetypeArtifactId=maven-archetype-quickstart \ -DinteractiveMode=false等待执行完毕后,执行目录下会自动生成名为 login.oauth2.github 的目录,包含完整的 Maven 项目结构。3.2.2 添加相关依赖打开 login.oauth2.github/pom.xml 文件,在其中添加以下依赖项:<!-- Spring Security 框架的配置模块 --><dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-config</artifactId> <version>5.3.2.RELEASE</version></dependency><!-- Spring Security OAuth2 认证客户端模块 --><dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-oauth2-client</artifactId> <version>5.3.2.RELEASE</version></dependency><!-- Spring Security OAuth2 授权信息加密模块 --><dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-oauth2-jose</artifactId> <version>5.3.2.RELEASE</version></dependency><!-- Spring Boot thymeleaf 启动模块,用于 Web 服务中的页面模板 --><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> <version>2.3.0.RELEASE</version></dependency><!-- Spring Boot thymeleaf 启动模块,用于启动 Web 服务 --><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <version>2.3.0.RELEASE</version></dependency><!-- Spring Boot thymeleaf 启动模块,包含适用于 Thymeleaf 的 Spring Security 扩展 --><dependency> <groupId>org.thymeleaf.extras</groupId> <artifactId>thymeleaf-extras-springsecurity5</artifactId> <version>3.0.4.RELEASE</version></dependency>添加完以上内容后,保持文件。在命令行中输入 mvn compile 测试依赖是否添加成功。3.2.3 创建 Web 项目创建 src/main/resources 目录,增加配置文件 application.yml,并添加如下配置:server: port: 8080spring: thymeleaf: cache: false修改 src/main/java/imooc/tonglei0429/springsecurity/App.java,使其作为 Spring Boot 项目启动。@SpringBootApplicationpublic class App { public static void main( String[] args ) { SpringApplication.run(App.class, args); }}创建 src/main/resources/templates/index.html 页,用于展示测试结果,index.html 文件内容如下:<!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="https://www.thymeleaf.org" xmlns:sec="https://www.thymeleaf.org/thymeleaf-extras-springsecurity5"><head> <title>OAuth2 登录测试</title> <meta charset="utf-8" /></head><body><div style="float: right" th:fragment="logout" sec:authorize="isAuthenticated()"> <div style="float:left"> <span style="font-weight:bold">User: </span><span sec:authentication="name"></span> </div> <div style="float:none"> </div> <div style="float:right"> <form action="#" th:action="@{/logout}" method="post"> <input type="submit" value="Logout" /> </form> </div></div><h1>Spring Security 示例:使用 OAuth2.0 + Github 实现用户认证</h1><div> 您已成功登录,当前用户 ID 为: <span style="font-weight:bold" th:text="${userName}"></span> 所属的客户端名称为: <span style="font-weight:bold" th:text="${clientName}"></span></div><div> </div><div> <span style="font-weight:bold">返回的用户属性:</span> <ul> <li th:each="userAttribute : ${userAttributes}"> <span style="font-weight:bold" th:text="${userAttribute.key}"></span>: <span th:text="${userAttribute.value}"></span> </li> </ul></div></body></html>为了使 http://localhost:8080/springsecurity/ 可以访问,还需要配置该路径的控制器,src/main/java/imooc/tonglei0429/springsecurity/web/OAuth2LoginController.java,其代码如下:@Controllerpublic class OAuth2LoginController { @GetMapping("/") public String index(Model model, @RegisteredOAuth2AuthorizedClient OAuth2AuthorizedClient authorizedClient, @AuthenticationPrincipal OAuth2User oauth2User) { model.addAttribute("userName", oauth2User.getName()); model.addAttribute("clientName", authorizedClient.getClientRegistration().getClientName()); model.addAttribute("userAttributes", oauth2User.getAttributes()); return "index"; }}此时如果运行项目,访问 localhost:8080/springsecurity,系统会默认跳转到 localhost:8080/login 要求登录,我们需要继续将认证源指向 Github。3.2.4 配置 OAuth2 认证服务器继续配置 application.yml 文件,添加配置项 security.oauth2.client.registration.github.client-id 和 security.oauth2.client.registration.github.client-secret 两项,其值来自于 Github 上注册应用后的返回页面。具体代码如下:spring: thymeleaf: cache: false security: oauth2: client: registration: github: client-id: 300c4622cd932acad32a client-secret: 71cb7971c2260f84c7b59693fbcf97b9c118c638
- 2.1 创建 Spring Boot web 服务端应用 工程目录结构如下:▾ OAuth2ResourceServer/ ▾ src/ ▾ main/ ▾ java/imooc/springsecurity/oauth2/server/ ▾ config/ OAuth2ResourceServerController.java # 配置控制器,用来扮演资源 OAuth2ResourceServerSecurityConfiguration.java # 资源服务器相关配置均在此处 OAuth2ResourceServerApplication.java # 启动类 ▾ resources/ application.yml # 配置 OAuth2.0 认证服务器的地址等信息 ▸ test/ pom.xml在 pom.xml 文件中增加依赖项,相比「用户名密码认证实例」,此处注意添加了 OAuth2 自动配置的相关依赖。spring-security-oauth2-autoconfigure 和 spring-security-oauth2-resource-server。完整 pom.xml 文件如下:<?xml version="1.0" encoding="UTF-8"?><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> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.3.1.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>org.example</groupId> <artifactId>OAuth2ResourceServer</artifactId> <version>0.0.1-SNAPSHOT</version> <properties> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-oauth2-resource-server</artifactId> <version>5.3.2.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.security.oauth.boot</groupId> <artifactId>spring-security-oauth2-autoconfigure</artifactId> <version>2.2.5.RELEASE</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build></project>创建 SpringSecurity OAuth2 资源服务器配置类,src/main/java/imooc/springsecurity/oauth2/server/OAuth2ResourceServerSecurityConfiguration.java。使其继承 org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter 类,并其增加 @EnableResourceServer 标签,以声明此类作为 OAuth2 资源服务器的配置依据;在 configure(HttpSecurity http) 方法中配置其资源的访问权限,本例中默认所有资源需要认证用户才能访问;完整代码如下:package imooc.springsecurity.oauth2.server.config;import org.springframework.context.annotation.Configuration;import org.springframework.security.config.annotation.web.builders.HttpSecurity;import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;import org.springframework.security.oauth2.config.annotation.web.configuration.EnableResourceServer;@Configuration@EnableResourceServerpublic class OAuth2ResourceServerSecurityConfiguration extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http .authorizeRequests(authorizeRequests -> authorizeRequests.anyRequest().authenticated() ) .csrf().disable(); }}在 application.yml 文件中,需要将 OAuth2.0 认证服务器的信息配置进去。server: port: 8081security: oauth2: client: client-id: reader # 客户端标识,与认证服务器中的写法相同 client-secret: secret # 客户端秘钥,与认证服务器中的写法相同 user-authorization-uri: http://localhost:8080/oauth/authorize # 客户端鉴权地址 access-token-uri: http://localhost:8080/oauth/token # 客户端获取 Token 地址 resource: id: reader # 资源服务器标识,这里可以根据业务情况填写 token-info-uri: http://localhost:8080/oauth/check_token # 验证 Token 的地址至此,资源服务器的核心内容均配置完成。
- 3.1 创建 Spring Boot web 服务端应用 工程目录结构如下:▾ OAuth2AuthorizationServer/ ▾ src/ ▾ main/ ▾ java/imooc/springsecurity/oauth2/server/ ▾ config/ OAuth2ServerConfiguration.java # OAuth2 相关配置类 UserConfiguration.java # 基础认证配置类,用于配置用户信息 OAuth2AuthorizationServerApplication.java # 程序入口 ▾ resources/ application.properties # 配置文件,本例中无特殊配置 ▾ test/java/ pom.xml在 pom.xml 文件中增加依赖项,相比「用户名密码认证实例」,此处注意添加了 OAuth2 自动配置的相关依赖。spring-security-oauth2-autoconfigure。完整 pom.xml 文件如下:<?xml version="1.0" encoding="UTF-8"?><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> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.3.1.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>imooc.springsecurity</groupId> <artifactId>OAuth2AuthorizationServerSample</artifactId> <version>0.0.1-SNAPSHOT</version> <properties> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.security.oauth.boot</groupId> <artifactId>spring-security-oauth2-autoconfigure</artifactId> <version>2.3.1.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-test</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build></project>创建 SpringSecurity OAuth2 配置类: OAuth2ServerConfiguration.java。src/ main/ java/ imooc/ springsecurity/ oauth2/ server/ OAuth2ServerConfiguration.java使其继承 org.springframework.security.oauth2.config.annotation.web.configuration.AuthorizationServerConfigurerAdapter 类,并其增加 @EnableAuthorizationServer 标签,以声明此类作为 OAuth2 认证服务器的配置依据;在 configure(AuthorizationServerEndpointsConfigurer endpoints) 方法中配置其 TokenStore,为了便于演示,此例中 TokenStore 采用内存形式,账户信息写死在代码中;在 configure(ClientDetailsServiceConfigurer clients) 方法中为 OAuth2 认证服务器设置可用于认证的客户端信息。完整代码如下:package imooc.springsecurity.oauth2.server.config;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.security.authentication.AuthenticationManager;import org.springframework.security.config.annotation.authentication.configuration.AuthenticationConfiguration;import org.springframework.security.oauth2.config.annotation.configurers.ClientDetailsServiceConfigurer;import org.springframework.security.oauth2.config.annotation.web.configuration.AuthorizationServerConfigurerAdapter;import org.springframework.security.oauth2.config.annotation.web.configuration.EnableAuthorizationServer;import org.springframework.security.oauth2.config.annotation.web.configurers.AuthorizationServerEndpointsConfigurer;import org.springframework.security.oauth2.provider.token.TokenStore;import org.springframework.security.oauth2.provider.token.store.InMemoryTokenStore;@EnableAuthorizationServer@Configurationpublic class OAuth2ServerConfiguration extends AuthorizationServerConfigurerAdapter { private AuthenticationManager authenticationManager; public OAuth2ServerConfiguration( AuthenticationConfiguration authenticationConfiguration) throws Exception { this.authenticationManager = authenticationConfiguration.getAuthenticationManager(); } @Override public void configure(ClientDetailsServiceConfigurer clients) throws Exception { // 配置授信客户端信息 clients.inMemory() // 内存模式 .withClient("reader") // 第一个客户端用户,其名称为「reader」 .authorizedGrantTypes("password") // 授权模式为「password」 .secret("{noop}secret") // 认证密码为「secret」,加密方式为「NoOp」 .scopes("message:read") // 权限的使用范围 .accessTokenValiditySeconds(600_000_000) // 票据有效期 .and() // 增加第二个授权客户端,设置方法一致,但拥有不同的范围权限 .withClient("writer") .authorizedGrantTypes("password") .secret("{noop}secret") .scopes("message:write") .accessTokenValiditySeconds(600_000_000); } @Override public void configure(AuthorizationServerEndpointsConfigurer endpoints) { endpoints .authenticationManager(this.authenticationManager) .tokenStore(tokenStore()); // 使用虚机内存存储票据信息,也可替换成 Mysql、Redis 等。 } @Bean public TokenStore tokenStore() { return new InMemoryTokenStore(); }}除了设置授权客户端之外,还要增加客户端中被授权的用户。创建类 UserConfiguration.javasrc/ main/ java/ imooc/ springsecurity/ oauth2/ server/ UserConfiguration.java并在其中配置用户信息。package imooc.springsecurity.oauth2.server.config;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.security.config.annotation.web.builders.HttpSecurity;import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;import org.springframework.security.core.userdetails.User;import org.springframework.security.core.userdetails.UserDetailsService;import org.springframework.security.provisioning.InMemoryUserDetailsManager;@Configurationpublic class UserConfiguration extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http .authorizeRequests() .anyRequest().authenticated() // 任何地址都受到保护,需要首先认证 .and() .httpBasic() // 支持基本认证,因为 OAuth2 认证往往用于不同种类客户端,所以基本认证支持是必要的。 .and() .csrf().disable(); } @Bean @Override public UserDetailsService userDetailsService() { InMemoryUserDetailsManager inMemoryUserDetailsManager = new InMemoryUserDetailsManager(); inMemoryUserDetailsManager.createUser(User.withUsername("admin").password("$2a$10$sR.KWdKOWYseh0KVHHnzMOveh/S7wvOkd.JrTyP2AzHhEcCSZfAmK").roles("USER").build()); // 用户名: admin; 密码: 123456 return inMemoryUserDetailsManager; }}
springsecurity相关搜索
-
s line
safari浏览器
samba
SAMP
samplerate
sandbox
sanitize
saper
sas
sass
save
smarty模板
smil
smtp
snapshot
snd
snmptrap
soap
soapclient
soap协议