我的Web应用程序的一部分是RESTfull api,而且是更标准的网页。
我希望REST部分包含一些自定义过滤器,例如EntryPoint,SuccessHandler和FailureHandler。这部分在/ rest / **映射中。
另一方面,其他一切都需要有更多常见的过滤器,并使用/**.
进行映射问题是要找到一种简单的方法来使用不同的映射过滤器定义filterChainProxy。
现在这个解决方案不起作用:
<!-- Normal web app -->
<http auto-config="true" use-expressions="true" authentication-manager-ref="authenticationManager">
<form-login/>
<logout/>
<intercept-url pattern="/**" access="hasRole('ROLE_USER')" />
</http>
<!-- Configure RESTfull services -->
<http use-expressions="true" authentication-manager-ref="authenticationManager" entry-point-ref="restAuthenticationEntryPoint" >
<form-login authentication-success-handler-ref="restAuthenticationSuccessHandler" login-page="/rest/login" username-parameter="username" password-parameter="password" />
<logout logout-url="/rest/logout" />
<intercept-url pattern="/rest/**" method="GET" access="hasRole('ROLE_USER')" />
<intercept-url pattern="/rest/**" method="POST" access="hasRole('ROLE_ADMIN')" />
<intercept-url pattern="/rest/**" method="PUT" access="hasRole('ROLE_ADMIN')" />
<intercept-url pattern="/rest/**" method="DELETE" access="hasRole('ROLE_ADMIN')" />
</http>
它抱怨:单一的比赛在其他模式之前。
有没有办法定义这样的东西,而无需使用定义定义filterChainProxy? http版本确实有助于减少配置量,因为我必须手动设置UsernamePasswordAuthenticationFilter等。
下一个问题更简单:在使用JSON对象进行表单登录身份验证后,我必须做出响应。
到目前为止,我已经实现了SuccessHandler(实际上是没有重定向部分的SimpleUrlAuthenticationSuccessHandler版本)。
如何编写JSON输出?
我必须有这样的事情:
HTTP 200 OK
使用:
{"success":true,"customer {"email":"customer@email.com","session_id":"b83a41dfaca6785399f00837888886e646ff9088"}}
与FailureHandler类似。它必须非常简单,这肯定是一些非常基本的东西,但你怎么做呢?重定向到自定义控制器不是一个解决方案,因为我将拥有一个非常简单的REST客户端可能无法理解的301重定向状态。
至少,我希望只有http标题,根本没有正文。
谢谢!
答案 0 :(得分:1)
如果您可以升级到Spring Security 3.1 supports multiple chains using namespace configuration。