如果isAuthenticated()== false,则返回403错误

时间:2013-10-08 12:37:10

标签: java spring configuration spring-security

我有这个春天的安全配置:

<http auto-config="true" use-expressions="true">

        <intercept-url pattern="/home.jsp" access="permitAll" />
        <intercept-url pattern="/loginFailed" access="permitAll" /> 
        <intercept-url pattern="/logOut" access="permitAll" />
        <intercept-url pattern="/*" access="isAuthenticated()" /> 

    <form-login login-page="/home.jsp" default-target-url="/index"
            authentication-failure-url="/loginFailed" />
        <logout  logout-success-url="/logOut"/>
    </http>

    <authentication-manager>
      <authentication-provider>
        <user-service>
            <user name="N_a" password="12" authorities="ROLE_USER" />
        </user-service>
      </authentication-provider>
    </authentication-manager>

如果我输入网址,则需要access="isAuthenticated(),我会重定向到home.jsp。  我想看403错误。 如何改变?

2 个答案:

答案 0 :(得分:0)

您正在使用基于表单的登录,因此,未经过身份验证时,系统会提示您使用登录页面。这是您已配置的内容,默认情况下,这是Spring Security的工作方式。

如果要覆盖此内容,则需要明确将AuthenticationEntryPoint配置为Http403ForbiddenEntryPoint。如果有人未经过身份验证或无权访问,这基本上总是给出403。这会禁用使用登录表单提示的功能,以便为用户提供登录更改。

<beans:bean id="entryPoint" class="org.springframework.security.web.authentication.Http403ForbiddenEntryPoint" />

<http auto-config="true" use-expressions="true" entry-point-ref="entryPoint"> 
<!-- Your other elements here -->
</http>

答案 1 :(得分:0)

http 标记中使用 access-denied-handler 标记。

http://www.mkyong.com/spring-security/customize-http-403-access-denied-page-in-spring-security/

或使用 access-denied-page 属性。

<http auto-config="true" access-denied-page="/403"></http>