我有两种方式可以在我的系统上进行身份验证。使用登录密码标准并使用BasicAuthentication进行API调用。当标准版本失败时,我将重定向发送到登录页面,但是当BasicAuth失败时,我想返回json响应。
我也定义了自定义AccessDecisionManager,并且在WebExpressionVoter返回access_denied之后,抛出了AccessDeniedException,在休息客户端中我看到了主页的html代码。 我应该如何配置我的spring安全性,以返回json响应?
由于
答案 0 :(得分:0)
您应该实现自定义org.springframework.security.web.access.AccessDeniedHandler
,它可以根据需要从handle
方法发送JSON响应。只要handle
拒绝访问,就会自动调用AccessDecisionManager
。
然后在Spring Security配置中将类的实例添加为bean,并从API的<security:http>
定义中引用它,如下所示:
<security:http pattern="/API/**">
<security:http-basic />
<security:access-denied-handler ref="myDeniedHandler"/>
</security:http>