我们在创建 URI 时遵循一定的约定。所有与身份验证相关的 URI,例如/login
,/logout
等都/changepassword
属于 sub-context /auth
。
因此,我们与身份验证相关的 URI 如下所示:
/auth/login
/auth/logout
/auth/changepassword
这就是我们在 Spring 安全上下文 XML 中的内容。
<http pattern="/auth/**" security="none" />
<http pattern="/resources/**" security="none" />
<http auto-config="true" access-decision-manager-ref="accessDecisionManager">
<intercept-url pattern="/admin/**" access="ADMINISTRATIVE_ACCESS"/>
<intercept-url pattern="/**" access="XYZ_ACCESS"/>
<form-login
login-page="/auth/login"
default-target-url="/content"
authentication-failure-url="/auth/loginFailed"
authentication-success-handler-ref="authenticationSuccessHandler"/>
<logout logout-url="/auth/logout" logout-success-url="/auth/login"/>
</http>
现在的问题是/auth/logout
访问时给我一个404。/auth
但是,如果我将其更改为以/abcd/logout
or even以外的其他内容开头/logout
,则效果很好。
我认为这是因为我们已将其定义/auth/**
为不安全但仍试图将其用作注销页面。(如果您还没有登录,如何访问注销?)
为了满足我们相当严格的 URI 命名约定,有什么办法可以解决这个问题吗?