Spring Security 3 以编程方式登录

Posted

技术标签:

【中文标题】Spring Security 3 以编程方式登录【英文标题】:Spring Security 3 programmatically login 【发布时间】:2011-04-26 04:06:02 【问题描述】:

我正在使用 spring 创建一个 REST Web 服务,我需要在其中实现登录/注销功能。函数的 url 应该类似于 .../api/login 和 .../api/logout。用户名和密码将使用 POST 方法传递。

我在 REST Web 服务下方有一个服务层。在服务层中,我有“登录”和“注销”功能的代码。我想使用spring security将登录的用户保存在spring的上下文中。我找到了几个答案,但没有一个完整的例子来说明如何做到这一点。我还想知道使用 Spring Security 进行这种自定义身份验证的最先进方法是什么(不使用任何登录表单,只需编程登录/注销)。

【问题讨论】:

【参考方案1】:

最好的方法是将您的身份验证实现插入 Spring Security。 您可以通过在 Spring Security 中注册自己的“身份验证提供程序”来做到这一点。

例如:

<bean id="authenticationManager" class="org.springframework.security.providers.ProviderManager">
    <property name="providers">
        <list>
            <ref local="myAuthenticationProvider"/>
        </list>
    </property>
</bean>

<bean id="myAuthenticationProvider" class="org.my.web.restapi.authentication.MyAuthenticationProvider"/>

另一件事:我知道这很费时间,但是在阅读Spring Security reference 之后,您一定会得到“大局”:-)

【讨论】:

【参考方案2】:

不确定这是否是您需要的。 以编程方式调用http://localhost:8080/webappname/j_spring_security_check 在表单参数 j_username 和 j_password 中传递用户名密码。 在 security-app-context.xml 中将 form-login 元素替换为

<form-login login-page="/login" login-processing-url="/j_spring_security_check"
    authentication-success-handler-ref="myAuthenticationSuccessHandler" 
    authentication-failure-handler-ref="myAuthenticationFailureHandler"/>

<beans:bean id="myAuthenticationSuccessHandler" class="com.something.MyAuthenticationSuccessHandler" />
<beans:bean id="myAuthenticationFailureHandler" class="com.something.MyAuthenticationFailureHandler" />

实现spring的AuthenticationSuccessHandler和AuthenticationFailureHandler。默认行为是重定向到登录表单。

【讨论】:

【参考方案3】:

如果您使用基本身份验证管理器,以下代码将在您的应用中获取它,而无需额外的 xml 配置:

@SuppressWarnings("SpringJavaAutowiringInspection")
@Resource(name = "org.springframework.security.authenticationManager")
private AuthenticationManager authenticationManager;

【讨论】:

以上是关于Spring Security 3 以编程方式登录的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Spring-security 以编程方式登录用户?

Spring security:以编程方式登录

如何使用 DaoAuthenticationProvider 以编程方式使用 Spring Security 对用户进行身份验证

您如何在 spring-security 中注销所有已登录的用户?

使用 Spring Security 4 以编程方式对用户进行身份验证

如何以编程方式检查某个 URL 是不是需要使用 Spring Security 进行身份验证?