Spring相当新,所以这可能是基本的。 我们最近从第3季度过渡到第4期,并遇到了与我们的合作伙伴业务逻辑相关的新defaults的一些标题问题
我们希望保留默认值,除了特定的网址" /stg/strategem/strg/drammin.syg"
目前我们有:
<http use-expressions="true" entry-point-ref="web.AuthenticaionEntryPoint">
<intercept-url pattern="/admin/**" access = "hasAnyRole('GKR_ADMIN', 'GKR_ADMIN_ADV')"/>
<intercept-url pattern="/**" access = "hasAnyRole('GKR_USER')"/>
</http>
如何配置此项以便[&#34; /stg/strategem/strg/drammin.syg"]仍然受到保护,但是下面的标头配置适用的唯一地方?
<headers defaults-disabled="true">
<content-type-options />
<hsts include-subdomains="true" max-age-seconds="31536000"/>
<frame-options policy="SAMEORIGIN"/>
<xss-protection block="false"/>
</headers>
更新1:能够使我需要无头的URL更具体
更新2: 我只是尝试添加另一个http块,但我不断收到Spring Error
通用匹配模式(&#39; / **&#39;) 在过滤器链中的其他模式之前定义,导致它们被忽略。
无论我把这些块放在什么顺序,我甚至尝试删除&#34; / **&#34;模式,这个错误仍然出现。
我的尝试:
<http use-expressions="true" entry-point-ref="web.AuthenticaionEntryPoint">
<intercept-url pattern="/admin/**" access = "hasAnyRole('GKR_ADMIN', 'GKR_ADMIN_ADV')"/>
<intercept-url pattern="/**" access = "hasAnyRole('GKR_USER')"/>
</http>
<http use-expressions="true" entry-point-ref="web.AuthenticaionEntryPoint">
<headers defaults-disabled="true">
<content-type-options />
<hsts include-subdomains="true" max-age-seconds="31536000"/>
<frame-options policy="SAMEORIGIN"/>
<xss-protection block="false"/>
</headers>
<intercept-url pattern="/stg/strategem/strg/drammin.syg" access = "hasAnyRole('GKR_ADMIN', 'GKR_ADMIN_ADV', 'GKR_USER')"/>
</http>
更新3:能够找到解决方案,请在答案中查看
答案 0 :(得分:1)
您应该能够拥有多个<http>
块,每个块具有不同的配置。见Spring Security Reference - Multiple Security
答案 1 :(得分:0)
好的伙计们,我能够通过使用具有模式但没有拦截URL的单独HTTP块来实现这一点。试图让两者都具有安全配置是造成这个问题的原因。
感谢Zilvinas指出我正确的道路。
第一个块将标头配置应用于特定网址。其他一切都得到了Spring的默认值。 第二个块应用安全措施。 (包括特定网址,因为我有/ **通配符)
<http pattern="/stg/strategem/strg/drammin.syg">
<headers defaults-disabled="true">
<content-type-options />
<hsts include-subdomains="true" max-age-seconds="31536000"/>
<frame-options policy="SAMEORIGIN"/>
<xss-protection block="false"/>
</headers>
</http>
<http use-expressions="true" entry-point-ref="web.AuthenticaionEntryPoint">
<intercept-url pattern="/admin/**" access = "hasAnyRole('GKR_ADMIN', 'GKR_ADMIN_ADV')"/>
<intercept-url pattern="/**" access = "hasAnyRole('GKR_USER')"/>
</http>