在我的应用程序中,我使用 security.xml,如下所示:
<security:http pattern="/services/upload" security="none" />
<security:http auto-config='true' create-session="stateless" entry-point-ref="digestEntryPoint">
<security:intercept-url pattern="/admin.html"
access="ROLE_ADMIN" />
<security:intercept-url pattern="/services/projects/**"
access="ROLE_ADMIN" />
<security:http-basic />
<security:custom-filter ref="digestFilter" after="BASIC_AUTH_FILTER" />
</security:http>
<bean id="digestFilter"
class="org.springframework.security.web.authentication.www.DigestAuthenticationFilter">
<property name="userDetailsService" ref="userService" />
<property name="authenticationEntryPoint" ref="digestEntryPoint" />
</bean>
<bean id="digestEntryPoint"
class="org.springframework.security.web.authentication.www.DigestAuthenticationEntryPoint">
<property name="realmName"
value="Admin Tab via Digest Authentication" />
<property name="key" value="acegi" />
</bean>
<security:authentication-manager>
<security:authentication-provider>
<security:user-service id="userService">
<security:user name="xx" password="xx"
authorities="ROLE_ADMIN" />
</security:user-service>
</security:authentication-provider>
</security:authentication-manager>
当我单击index.html 上的管理选项卡时,浏览器会弹出其(不受我控制)表单以输入登录名和密码。当我单击此按钮上的“取消”时,我收到 401 错误页面。当我输入错误的凭据时,弹出窗口会重置并且不会通知我有关凭据的信息。我想要实现的是,当用户单击“取消”时,仅停留在 index.html 上,并在用户输入错误凭据时显示一些信息。我尝试了很多解决方案,但无法找到任何解决方案。这可能吗?
最佳答案
原因是您使用的是 BasicAuth,这意味着您必须通过 Base64 编码在请求 header 中发送凭据。因此,浏览器会识别该信息并询问您的凭据。如果你想改变这一点,你必须采用状态完整的场景。然后您就可以拥有用户可以登录的自定义登录页面。
但是对于Rest API,上面的配置是正确的,我们不想控制登录,因为它是基本身份验证。有关更多详细信息,请查看此 http://malalanayake.wordpress.com/2014/06/30/stateless-spring-security-on-rest-api/
关于java - 如何使用 Spring Security 更改登录的弹出行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25011420/