如果用户无权访问某些 URI 模式,是否可以在 Spring Security 配置中创建条件以防止显示登录表单?
我现在有以下配置:-
<security:http auto-config="true">
<security:form-login login-page="/" authentication-failure-url="/?login_error=1" default-target-url="/" always-use-default-target="true"/>
<security:logout logout-success-url="/"/>
<security:intercept-url pattern="/secure/**" access="ROLE_ADMIN,ROLE_USER"/>
<security:intercept-url pattern="/api/**" access="ROLE_WEBSERVICE"/>
<security:intercept-url pattern="/**" access="IS_AUTHENTICATED_ANONYMOUSLY"/>
</security:http>
这就是我希望 Spring Security 处理的:-
- 当用户在
/secure/**
没有从浏览器正确访问的情况下点击时,应该显示一个登录表单。此配置满足此要求。 - 当用户在
/api/**
没有正确访问权限的情况下点击时,抛出 403 错误而不是显示登录表单。原因是用户可能以编程方式从 javascript 或使用 curl 调用 Web 服务,并且在响应中返回登录表单的 HTML 源代码是没有意义的。 /api/login
在他们可以使用其他/api
Web 服务之前,使用将调用对自己进行身份验证。
我一直在使用 Spring Security 构建这个 Web 应用程序,它运行得很好。但是,现在,我需要能够通过 Web 服务公开一些功能,并且我很难尝试使用 Spring Security 来保护我的 Web 应用程序和我的 Web 服务。
非常感谢任何建议。谢谢。