如何使用 Spring Security 注入默认安全标头

Posted

技术标签:

【中文标题】如何使用 Spring Security 注入默认安全标头【英文标题】:How to inject default security headers with Spring Security 【发布时间】:2020-04-10 02:25:52 【问题描述】:

我使用 Spring Security 5.1.6,并阅读有关安全标头 here 的信息;

Spring Security 允许用户轻松注入默认安全性 标头以帮助保护其应用程序。默认为 Spring Security 将包含以下标头:

缓存控制:无缓存、无存储、max-age=0、必须重新验证 编译指示:无缓存 过期:0 X-Content-Type-Options: nosniff 严格的传输安全性: max-age=31536000 ;包括子域 X 帧选项:拒绝 X-XSS-保护:1;模式=块

但是从这个文档看来,这些头文件似乎没有被隐式添加,所以我需要自己注入默认头文件。问题是,我可以在 spring-security.xml 中做到这一点,还是必须以其他方式做到这一点?

【问题讨论】:

@AK47 好像没有,因为有些资源没有得到标题。 “让用户轻松注入”听起来好像真的要对我做点什么。 【参考方案1】:

据我了解,默认头文件没有默认设置,需要在spring-security.xml中包含这个:

<security:headers/>

对于您希望包含默认标题的任何模式。 示例:

<security:http pattern="/certainpage.html" use-expressions="true" request-matcher="regex" authentication-manager-ref="authManagerLink">
        <security:http-basic/>
        <security:intercept-url pattern="/certainpage.html" access="permitAll"/>
        <security:headers/>
</security:http>

只添加特定的安全标头是这样完成的:

<security:headers>
            <security:frame-options policy="SAMEORIGIN"/>
            <security:content-type-options disabled="false" />
            <security:xss-protection enabled="true" block="true" />
</security:headers>

我正在使用&lt;spring.security.version&gt;5.1.6.RELEASE&lt;/spring.security.version&gt;

【讨论】:

以上是关于如何使用 Spring Security 注入默认安全标头的主要内容,如果未能解决你的问题,请参考以下文章

使用 Spring 和 Spring Security 正确注入 SessionFactory

使用 Spring Security 的自动装配依赖注入

Spring Security 使用非spring默认的登陆页面,是如何跳转到登陆成功页面的?

spring-security 如何使用用户名或邮箱登录

Spring Security教程(10)---- 自定义登录成功后的处理程序及修改默认验证地址

Spring Security:如果没有指定@PreAuthorize,如何默认拒绝请求