RESTful API的Spring Security

时间:2015-04-25 23:25:10

标签: spring rest spring-security spring-security-rest

我正在使用Spring 4.1.6和entries构建一个restful API。

为了使其余的功能完全正常,我需要最后一块拼图:安全性。现在我注意到Spring有它自己的spring-boot-starter-data-rest包可以帮助完成这项任务。

我尝试使用spring-security-*spring-security-config,它就像一个魅力,但是如果用户未经过身份验证,则spring会将用户重定向到登录,从而提供HTML登录表单。 因为它是Restful API,所以如果用户缺少凭据或者没有足够的权限来读取特定资源,我只需要在JSON对象中返回错误。 我确定我不是第一个提出这个问题的人,并且在网上搜索过那些问同样事情的人,但是找不到我想要的东西。所以..我应该继续我的研究,以保证弹簧安全,或者我应该找到什么?

欢迎任何建议, 谢谢

1 个答案:

答案 0 :(得分:1)

要将登录表单响应更改为自定义Http响应,您需要为Http Security配置配置自定义http响应处理程序。如果您使用xml作为安全配置,请使用下面显示的配置,使用的failureHandler是Spring Security软件包中提供的配置。更新网址以匹配您的网址。

<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/security"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:beans="http://www.springframework.org/schema/beans"
    xmlns:sec="http://www.springframework.org/schema/security"
    xsi:schemaLocation="
      http://www.springframework.org/schema/security
      http://www.springframework.org/schema/security/spring-security-3.2.xsd
      http://www.springframework.org/schema/beans
      http://www.springframework.org/schema/beans/spring-beans-4.0.xsd">

    <!-- Rest authentication entry point configuration -->
    <http use-expressions="true" entry-point-ref="restAuthenticationEntryPoint">
        <intercept-url pattern="/api/**" />
        <sec:form-login authentication-failure-handler-ref="myFailureHandler" />

        <logout />
    </http>

    <!-- Using default failure handler -->
    <beans:bean id="myFailureHandler"
        class="org.springframework.security.web.authentication.SimpleUrlAuthenticationFailureHandler" />
</beans:beans>