如果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.授予默认用户名的角色