如果Spring Security在classpath中,那么web應用默認對所有的HTTP端點使用'basic'認證。為了給web應用添加方法級別(method-level)的安全性,你還可以添加@EnableGlobalMethodSecurity和你想要的設置,額外的信息可以在Spring Security Reference中找到。
默認的AuthenticationManager只有一個單獨的用戶(用戶名為'user'并且密碼為隨機密碼,會在應用啟動時在INFO級別打印出來)
Using default security password: 474dcc50-1a68-400e-af74-0b9494e312fa
如果你對日志配置進行調整,確保org.springframework.boot.autoconfigure.security類別設置為記錄INFO消息,否則默認的密碼不會被打印。
你可以通過提供一個security.user.password來更改密碼,這個和其他有用的屬性通過SecurityProperties(以"security"為前綴的屬性)被外部化了(外部化的文件在application.properties或application.yml中)。
默認的安全配置在SecurityAutoConfiguration和從那里導入的類中實現(SpringBootWebSecurityConfiguration用于web安全,AuthenticationManagerConfiguration可用于非web應用的身份驗證配置)。你可以添加一個使用@EnableWebSecurity注解的bean,完全關閉Web應用程序默認的安全配置(這并不會禁用身份驗證管理器配置或Actuato的安全性)。你通常需要使用外部的屬性配置和WebSecurityConfigurerAdapter類型的beans來自定義它(比如,添加基于表單的登陸)。 也關閉身份驗證管理器的配置,你可以添加一個AuthenticationManager類型的bean,要不然在你一個@Configuration類的某個方法里,自動裝配一個AuthenticationManagerBuilder來配置全局的AuthenticationManager。這是 Spring Boot示例。
在web應用中你能得到的開箱即用的基本特性如下:
- 一個使用內存存儲的AuthenticationManager bean和一個單獨的用戶(user的屬性可以查看SecurityProperties.User)。
- 忽略(無保護的)常見的靜態資源位置(/css/, /js/, /images/,/webjars/和 **/favicon.ico)。
- 為其他所有的端點進行HTTP Basic安全保護。
- 安全相關的事件會發布到Spring的ApplicationEventPublisher(成功和失敗的認證,拒絕訪問)。
- Spring Security提供的常見底層特性(HSTS, XSS, CSRF, 緩存)默認都被開啟。
上述所有特性都能通過外部屬性配置(security.*)打開,關閉,或修改。想要覆蓋訪問規則而不改變其他自動配置的特性,你可以添加一個帶@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER)注解的WebSecurityConfigurerAdapter類型的@Bean。
WebSecurityConfigurerAdapter默認會匹配所有路徑,如果不想完全覆蓋Spring Boot自動配置的訪問規則,你可以明確的配置你想要覆蓋的路徑。
外部屬性配置SECURITY PROPERTIES
security.basic.authorize-mode=role # Security authorize mode to apply.安全授權模式應用
security.basic.enabled=true # Enable basic authentication.啟用basic身份驗證
security.basic.path=/** # Comma-separated list of paths to secure.以逗號分隔的路徑列表保護
security.basic.realm=Spring # HTTP basic realm name.HTTP基礎域名
security.enable-csrf=false # Enable Cross Site Request Forgery support.啟用跨站點請求偽造支持
security.filter-order=0 # Security filter chain order.安全過濾器鏈順序
security.filter-dispatcher-types=ASYNC, FORWARD, INCLUDE, REQUEST # Security filter chain dispatcher types.安全過濾器鏈調度器類型
security.headers.cache=true # Enable cache control HTTP headers.啟用緩存控制HTTP頭
security.headers.content-security-policy= # Value for content security policy header.內容安全策略頭值
security.headers.content-security-policy-mode=default # Content security policy mode.內容安全策略模式
security.headers.content-type=true # Enable "X-Content-Type-Options" header.啟用"X-Content-Type-Options"頭
security.headers.frame=true # Enable "X-Frame-Options" header.啟用 "X-Frame-Options" 頭。
security.headers.hsts=all # HTTP Strict Transport Security (HSTS) mode (none, domain, all).HTTP嚴格傳輸安全(HSTS)模式(none, domain, all)
security.headers.xss=true # Enable cross site scripting (XSS) protection.啟用跨站腳本攻擊(XSS)保護
security.ignored= # Comma-separated list of paths to exclude from the default secured paths.從默認的安全路徑排除以逗號分隔的路徑
security.require-ssl=false # Enable secure channel for all requests.為所有請求啟用安全通道
security.sessions=stateless # Session creation policy (always, never, if_required, stateless).Session創建策略(always, never, if_required, stateless)
security.user.name=user # Default user name.默認的用戶名
security.user.password= # Password for the default user name. A random password is logged on startup by default.默認用戶名的密碼,啟動時默認登錄使用隨機密碼。
security.user.role=USER # Granted roles for the default user name.授予默認用戶名的角色