springboot2.0之安全
簡介
如果在classpath上設定了spring 安全,預設的話其web 也是安全的。springboot依賴於spring 的安全宣告策略決定是使用httpBasic
或者 formLogin
,新增web應用的安全等級方法,可以使用@EnableGlobalMethodSecurity
新增你想要的配置。
預設的認證管理是擁有一個單獨的使用者。如下所示:
Using generated security password: 78fa095d-3f4c-48b1-ad50-e24c31d5cf35
可以通過提供spring.security.user.name
與spring.security.user.password
改變其使用者和密碼。
預設的安全配置是通過SecurityAutoConfiguration
實現(同時也包括非web應用程式)。關閉預設的安全配置,可以通過新增一個WebSecurityConfigurerAdapter
型別的bean實現。
關閉認證管理配置,可以通過新增 UserDetailsService
, AuthenticationProvider
與 AuthenticationManager
的型別。
在一個web應用程式中,你預設得到的一個基礎特性是:
-
一個
UserDetailsService
bean(在記憶體中儲存以及一個產生密碼的word) - 基於表格的登入或者是基於整個http的安全認證要求(包括執行者的點)。
可以通過新增一個自定義的WebSecurityConfigurerAdapter去覆蓋其規則。spring boot對actuator endpoints於靜態資源提供了便利的方法去處理。
EndpointRequest
能夠建立一個基於management.endpoints.web.base-path
的屬性。StaticResourceRequest
能夠給建立一個指定靜態資源位置的 RequestMatcher
。
OAuth2
其是一種被spring廣泛支援的授權框架。
客戶端
如果你有
spring-security-oauth2-client
,你就可以充分利用其自動配置簡化安裝oauth2的客戶端。這充分利用其 OAuth2ClientProperties
的配置屬性,你可以通過使用 spring.security.oauth2.client
字首註冊客戶端:程式碼如下spring.security.oauth2.client.registration.my-client-1.client-id=abcd
spring.security.oauth2.client.registration.my-client-1.client-secret=password
spring.security.oauth2.client.registration.my-client-1.client-name=Client for user scope
spring.security.oauth2.client.registration.my-client-1.provider=my-oauth-provider
spring.security.oauth2.client.registration.my-client-1.scope=user
spring.security.oauth2.client.registration.my-client-1.redirect-uri-template=http://my-redirect-uri.com
spring.security.oauth2.client.registration.my-client-1.client-authentication-method=basic
spring.security.oauth2.client.registration.my-client-1.authorization-grant-type=authorization_code
spring.security.oauth2.client.registration.my-client-2.client-id=abcd
spring.security.oauth2.client.registration.my-client-2.client-secret=password
spring.security.oauth2.client.registration.my-client-2.client-name=Client for email scope
spring.security.oauth2.client.registration.my-client-2.provider=my-oauth-provider
spring.security.oauth2.client.registration.my-client-2.scope=email
spring.security.oauth2.client.registration.my-client-2.redirect-uri-template=http://my-redirect-uri.com
spring.security.oauth2.client.registration.my-client-2.client-authentication-method=basic
spring.security.oauth2.client.registration.my-client-2.authorization-grant-type=authorization_code
spring.security.oauth2.client.provider.my-oauth-provider.authorization-uri=http://my-auth-server/oauth/authorize
spring.security.oauth2.client.provider.my-oauth-provider.token-uri=http://my-auth-server/oauth/token
spring.security.oauth2.client.provider.my-oauth-provider.user-info-uri=http://my-auth-server/userinfo
spring.security.oauth2.client.provider.my-oauth-provider.jwk-set-uri=http://my-auth-server/token_keys
spring.security.oauth2.client.provider.my-oauth-provider.user-name-attribute=name
預設情況下,spring security 的OAuth2LoginAuthenticationFilter
是僅僅處理與 /login/oauth2/code/*
.匹配的URI。如果想要自定義話一個不同的redirect-uri-template
,需要提供自定義模式的處理配置,如下程式碼
public class OAuth2LoginSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.anyRequest().authenticated()
.and()
.oauth2Login()
.redirectionEndpoint()
.baseUri("/custom-callback");
}
}
對於一些通用的OAuth2 ( Google, Github, Facebook, 與Okta),我們提供了許多預設的提供者。
執行者安全
如果執行者也是在使用中,你可以看到:
- 管理終端也是安全的,即使應用終端不是安全的。
- 安全事件被轉換為審計例項並且被儲存到審計儲存庫中。
- 預設使用者在擁有
ACTUATOR
角色的同時也擁有user的角色
其ACTUATOR的安全特性可以通過外部檔案進行修改。覆蓋應用程式的連結規則,但是不是actuator 的連結規則,新增一個WebSecurityConfigurerAdapter 型別的bean和使用
@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER)
。當確實想要覆蓋應用程式的規則以及
ACTUATOR
的連結規則,使用@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER)。
相關文章
- SpringBoot2.0應用(四):SpringBoot2.0之spring-data-jpaSpring Boot
- SpringBoot2.0之Servlet容器變成UndertowSpring BootServlet
- 【SpringBoot2.0系列09】SpringBoot之rabbiSpring Boot
- SpringBoot2.0應用(五):SpringBoot2.0整合MyBatisSpring BootMyBatis
- SpringBoot2.0應用(二):SpringBoot2.0整合ActiveMQSpring BootMQ
- SpringBoot2.0應用(三):SpringBoot2.0整合RabbitMQSpring BootMQ
- SpringBoot2.0應用(一):SpringBoot2.0簡單介紹Spring Boot
- springboot2.0整合webserviceSpring BootWeb
- springboot2.0整合rabbitmqSpring BootMQ
- springboot2.0 配置redis哨兵Spring BootRedis
- springboot2.0 整合springDataJpaSpring Boot
- SpringBoot2.0 整合 springmvcSpring BootSpringMVC
- SpringBoot2.0極簡教程Spring Boot
- SpringBoot2.0 優雅停機Spring Boot
- 【SpringBoot2.0系列12】SpringBoot之JavaMail傳送,支援FreeMark模板渲染Spring BootJavaAI
- 正火的SpringBoot2.0更新了啥?Spring Boot
- 運維安全之NFS安全運維NFS
- springboot2.0 獲取啟動埠號Spring Boot
- 安全CHIP之DHCP
- Java安全之安全加密演算法Java加密演算法
- 產業觀察:解剖安全產業之“安全”(轉)產業
- SpringBoot2.0原始碼分析(二):整合ActiveMQ分析Spring Boot原始碼MQ
- SpringBoot2.0原始碼分析(三):整合RabbitMQ分析Spring Boot原始碼MQ
- 企業IT安全:國防安全之縮影
- Web前端安全之安全編碼原則Web前端
- Web 安全之內容安全策略 (CSP)Web
- 甲方安全建設之研發安全-SCA
- XML安全之Web ServicesXMLWeb
- PHP 安全之 webshell 分析PHPWebshell
- Java 安全之Java AgentJava
- Java安全之JNDI注入Java
- 初探Java安全之JavaAgentJava
- Java安全之ClassLoaderJava
- Java安全之URLDNS鏈JavaDNS
- Web 安全之 XSSWeb
- mysql安全之loginpathMySql
- JAVA安全之JAVA伺服器安全漫談Java伺服器
- springboot2.0以上排程器配置執行緒池Spring Boot執行緒