0

我正在使用 Spring 3.2 + primefaces 3.5 + hibernate 4.1.9 安全上下文是:

<http auto-config='false' use-expressions="true"   >
    <intercept-url pattern="/**/login"  access="permitAll" requires-channel="https"/>
    <intercept-url pattern="/**/registration" access="permitAll" requires-channel="https" />
    <intercept-url pattern="/**/cart" access="permitAll" requires-channel="https"  />
    <intercept-url pattern="/**/cart/**" access="hasAnyRole('USER','ADMIN')" requires-channel="https" />
    <intercept-url pattern="/pages/adm/**" access="hasRole('ADMIN')" requires-channel="https" />
    <intercept-url pattern="/*/account**" access="hasAnyRole('USER','ADMIN')" requires-channel="https" />
    <intercept-url pattern="/**" requires-channel="any" />

    <form-login login-page="/loginRedirect"             
        authentication-failure-handler-ref="pennyUrlAuthenticationFailureHandler"
        authentication-success-handler-ref="pennyAuthSuccessHandler"
        default-target-url="/pages/account/orders.xhtml" />
    <logout logout-success-url="/"  invalidate-session="true"/>
</http>

如果我转到需要 HTTPS 的页面,在会话的其余部分,它将使用 HTTPS 协议,即使用户未通过身份验证。如果我去 https://mystite/en/cart,HTTPS 将用于所有浏览会话。

我不想永远将 HTTPS 切换到 HTTP,但前提是用户未经过身份验证。我可以强制未经身份验证的用户使用 HTTP 吗?

4

1 回答 1

1

如果我转到需要 HTTPS 的页面,在会话的其余部分,即使用户未通过身份验证,它将使用 HTTPS 协议。

这是正确的,因为

<intercept-url pattern="/**/cart/**" access="hasAnyRole('USER','ADMIN')" requires-channel="https" />

另外,由于

<intercept-url pattern="/**" requires-channel="any" />

一旦用户请求了需要 HTTPS 的资源,它将坚持使用 HTTPS。any如果您说(HTTPS 与任何协议一样好),为什么它必须切换回来?

我可以强制未经身份验证的用户使用 HTTP 吗?

不,不是我知道的。就个人而言,我认为这也没有多大意义。

于 2013-05-27T11:20:14.747 回答