Spring Security是否提供任何此类API,我可以通过用户名&密码并获取身份验证对象?

时间:2012-12-14 09:29:11

标签: spring-security

Spring Security是否提供任何此类API,我可以通过用户名&密码,它将返回验证对象以进行成功验证,还是返回AuthenticationCredentialsNotFoundException以进行不成功的验证?

让我详细说明我的要求:

我们的应用程序有一个HTTP API(例如/createXXX.do),客户端使用用户名,密码&其他参数。

现在我想验证+授权此访问权限(来自HTTP Hits到我的应用程序)。

我的计划设计如下:  a)我不会限制访问我的HTTP API上下文(即/createXXX.do)

b)一旦请求到达我的doGet()/ doPost(),我将检索用户名&来自请求的密码,并希望使用如下的一些Spring安全API:

身份验证validateXXXXX(字符串用户名,字符串密码) 抛出AuthenticationCredentialsNotFoundException;

c)以便上面的API在内部将这些用户名/密码推送到现有的spring安全链,并返回认证对象以进行成功认证,或返回AuthenticationCredentialsNotFoundException以进行不成功的认证。

d)对于不成功的身份验证,我将捕获AuthenticationCredentialsNotFoundException并使用AUTHENTICATION_ERROR代码返回HttpServletResponse。

e)并且为了成功验证,基于Authentication Object的authiories,我将允许或返回带有AUTHORIZATION_ERROR代码的HttpServletResponse。

有谁知道这样的Spring安全API? 任何指针/建议都将受到高度赞赏。

感谢。

1 个答案:

答案 0 :(得分:1)

如果您只有一个身份验证源(仅限LDAP或仅限DB),则可以在安全上下文中配置org.springframework.security.authentication.AuthenticationProvider的某些实现。然后你可以使用它:

User user = new User(login, password, true, true, true, true, new ArrayList<GrantedAuthority>());
Authentication auth = new UsernamePasswordAuthenticationToken(user, password,new ArrayList<GrantedAuthority>());
try {
    auth = authenticationProvider.authenticate(auth);
} catch (BadCredentialsException e) {
    throw new CustomBadCredentialsException(e.getMessage(), e);
}

// but your need to push authorization object manually
SecurityContext sc = new SecurityContextImpl();
sc.setAuthentication(auth);
SecurityContextHolder.setContext(sc);

这是“低级别”操纵。您可以使用Spring Security命名空间中的元素。它可以为您提供登录控制器,甚至登录表单(它可以自动处理这种情况)。