1

如果用户无权访问某些 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 处理的:-

  1. 当用户在/secure/**没有从浏览器正确访问的情况下点击时,应该显示一个登录表单。此配置满足此要求。
  2. 当用户在/api/**没有正确访问权限的情况下点击时,抛出 403 错误而不是显示登录表单。原因是用户可能以编程方式从 javascript 或使用 curl 调用 Web 服务,并且在响应中返回登录表单的 HTML 源代码是没有意义的。
  3. /api/login在他们可以使用其他/apiWeb 服务之前,使用将调用对自己进行身份验证。

我一直在使用 Spring Security 构建这个 Web 应用程序,它运行得很好。但是,现在,我需要能够通过 Web 服务公开一些功能,并且我很难尝试使用 Spring Security 来保护我的 Web 应用程序和我的 Web 服务。

非常感谢任何建议。谢谢。

4

1 回答 1

2

您可以根据传入请求路径的模式定义多个过滤器链,并使用它来将 Web 服务部分与浏览器访问分开。

对于/api过滤器链,您将定义一个Http403ForbiddenEntryPoint并将其设置为entry-point-ref属性:

<http pattern="/api/**" entry-point-ref="forbiddenEntryPoint">
   ...
</http>

<http>
   ... standard form-login etc., as you have now
</http>

<bean id="forbiddenEntryPoint" class="org.springframework.security.web.authentication.Http403ForbiddenEntryPoint" />
于 2013-03-29T20:22:19.263 回答