Spring Security多个filterChainProxy映射/过滤器,自定义过滤器Json Output

时间:2011-12-29 16:42:11

标签: json spring-mvc spring-security

我的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标题,根本没有正文。

谢谢!

1 个答案:

答案 0 :(得分:1)

如果您可以升级到Spring Security 3.1 supports multiple chains using namespace configuration