java - 如何使用 Spring Security 更改登录的弹出行为?

标签 java spring spring-security

在我的应用程序中,我使用 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/

相关文章:

java - GWT 客户端错误 (TypeError) : b is null

java - 如何在spring ws客户端请求中添加证书链

java - 登录后自定义区域设置重定向 - Spring Security

java - 当 jwt token 无效时,主体对象为 null

java - 在 eclipse 之外将 Spring MVC 应用程序部署到 tomcat 的幕后会发生什么?

java - 如果 Swing 模型的 getter 不是线程安全的,您将如何处理它们?

Java:匹配字符串中的短语

java - 以编程方式添加 AnnotationSessionFactoryBean

java - Spring + Atmoting + Tomcat 线程泄漏

java - False 无法 Autowiring Intellij 错误