4

我需要在我的 Spring Security 文件中同时支持 HTTP 和 HTTPS,并在运行时在它们之间动态切换。

因此,我正在尝试创建包含任何/http/https 之一的属性文件,但这不会解析 XML 配置。

弹簧安全配置:

<sec:http entry-point-ref="portalEntryPoint">
    <sec:anonymous />
    <sec:intercept-url pattern = "/portal" access="IS_AUTHENTICATED_ANONYMOUSLY"
            requires-channel="${user-security.login.channel}" />
    <!-- rest omitted -->
</sec:http>

属性文件:

user-security.login.channel=https

我收到以下错误:

Caused by: org.xml.sax.SAXParseException: cvc-enumeration-valid: Value '${user-security.login.channel}' is not facet-valid with respect to enumeration '[http, https, any]'. It must be a value from the enumeration.

我正在使用 Spring 3 和 Spring Security 2。有什么想法吗?

4

2 回答 2

1

这在 Spring Security 2 中是不可能的,您必须使用 Spring Security 3.0+

在Spring Security 3.0 发布之前修复了一个关于此支持的问题。

于 2012-08-31T14:51:43.837 回答
1

如果您绝对必须使用配置文件来配置您的门户入口点。显然,这意味着在您的 spring 配置中进行大量复制和粘贴......

springsource 文档中的示例:

<bean id="transferService" class="com.bank.service.internal.DefaultTransferService">
    <constructor-arg ref="accountRepository"/>
    <constructor-arg ref="feePolicy"/>
</bean>

<bean id="accountRepository" class="com.bank.repository.internal.JdbcAccountRepository">
    <constructor-arg ref="dataSource"/>
</bean>

<bean id="feePolicy" class="com.bank.service.internal.ZeroFeePolicy"/>

<beans profile="dev">
    <jdbc:embedded-database id="dataSource">
        <jdbc:script location="classpath:com/bank/config/sql/schema.sql"/>
        <jdbc:script location="classpath:com/bank/config/sql/test-data.sql"/>
    </jdbc:embedded-database>
</beans>

<beans profile="production">
    <jee:jndi-lookup id="dataSource" jndi-name="java:comp/env/jdbc/datasource"/>
</beans>

链接http://blog.springsource.com/2011/02/14/spring-3-1-m1-introducing-profile/

于 2012-08-31T15:43:38.547 回答