0

Spring Security 是否提供了任何此类 API,我可以在其中传递用户名和密码,并且它将返回 Authentication Object 以进行成功的身份验证或 AuthenticationCredentialsNotFoundException 用于不成功的身份验证?

让我详细说明我的要求:

我们的应用程序有一个 HTTP API(比如 /createXXX.do),客户端使用用户名、密码和其他参数来访问它。

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

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

b) 一旦请求到达我的 doGet()/doPost(),我将从请求中检索用户名和密码,并希望使用一些 Spring Security API,如下所示:

Authentication validateXXXXX(String username, String password) 抛出 AuthenticationCredentialsNotFoundException;

c) 以便上面的 API 在内部将这些用户名/密码推送到现有的 spring 安全链,并返回 Authentication Object 用于成功的身份验证或 AuthenticationCredentialsNotFoundException 用于不成功的身份验证。

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

e) 为了成功进行身份验证,基于身份验证对象的权限,我将允许或返回带有 AUTHORIZATION_ERROR 代码的 HttpServletResponse。

任何人都可以知道这样的弹簧安全 API 吗?任何指针/建议将不胜感激。

谢谢。

4

1 回答 1

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 命名空间中的元素。它可以为您提供登录控制器,甚至登录表单(它可以自动处理这种情况)。

于 2012-12-14T09:57:08.090 回答