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? 任何指针/建议都将受到高度赞赏。
感谢。
答案 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命名空间中的元素。它可以为您提供登录控制器,甚至登录表单(它可以自动处理这种情况)。