Spring中的自定义身份validation

我有个问题。 在Struts中,我有一个处理用户身份validation的Action,即我获取了用户的凭据并使用DAO来validation用户凭据。 我想在Spring中保持相同的设置。 我正在使用Spring 3.0.3 RELEASE。

我的问题是,我已经阅读了Spring Security,并在那里指定了JDBC后端“Validation”提供程序。 我想知道,如果用户单击“登录”它将提交凭据提交给我的控制器以检查有效身份validation怎么办?

我想这样做的原因是我有一个处理用户身份validation和授权的服务。

提前致谢。

PS如何在Spring中使某些控制器安全?
PPS我是Spring的新手

您可以创建一个自定义身份validation提供程序来实现org.springframework.security.authentication.AuthenticationProvider就像这样

 package com.bzone.example; import org.springframework.security.authentication.AuthenticationProvider; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.core.Authentication; import org.springframework.security.core.AuthenticationException; public class CustomAuthenticationProvider implements AuthenticationProvider{ @Override public Authentication authenticate(Authentication authentication) throws AuthenticationException { // TODO call custom service or do whatever you want return null; } @Override public boolean supports(Class authentication) { // copied it from AbstractUserDetailsAuthenticationProvider return (UsernamePasswordAuthenticationToken.class.isAssignableFrom(authentication)); } } 

还有一步是配置spring security以使用此自定义身份validation提供程序

                  

通常,Spring Security使用您的代码作为策略(身份validation提供程序,用户详细信息服务等)在其自己的代码中处理身份validation。 但您可以在自己的代码中处理身份validation。

在您的操作代码中,当用户凭据正确时,您将:

  • 创建包含用户名和授予角色的Authentication (您可以使用UsernamePasswordAuthenticationToken作为方便的实现)。
  • 把它放到安全上下文中:
    SecurityContextHolder.getContext().setAuthentication(auth);
  • 使用AuthenticationEventPublisher.publishAuthenticationSuccess(...)广播身份validation成功事件(您可以从上下文自动assembly它或显式创建DefaultAuthenticationEventPublisher )。
  • 使用SavedRequestAwareAuthenticationSuccessHandler.onAuthenticationSuccess(...)将用户重定向到安全资源。

您还需要提供AuthenticationEntryPoint

      ...  

但是,如果您在Spring中实际上是新手,那么最好避免这种大规模的自定义并使用常规的Spring Security架构。

您可以为Spring Security编写自己的validation机制。 它必须包含以下部分:

  • validationfilter – 从请求中读取数据,然后使用凭证令牌(类validation的实例)调用validation提供程序
  • Auth Provider – 接受此身份validation令牌(filter可以创建不同的tokents,并且每种令牌类型可以有不同的auth提供者),并尝试进行身份validation(根据您的情况调用您的服务)。 在auth之后,您可以(或可能不)调用用户详细信息服务或在那里填写所有用户数据
  • 用户详细信息服务 – 从某个地方(从jdbc,其他服务等)加载用户详细信息