Java 如何在不登录Spring security的情况下检查用户详细信息

Java 如何在不登录Spring security的情况下检查用户详细信息,java,spring,struts2,spring-security,Java,Spring,Struts2,Spring Security,如何在进行spring安全身份验证之前检查userdetails 在我的项目中,在登录期间,我需要检查基本验证用户名/密码是否存在、用户名的有效性、最大重试限制(在该块a/c之后有5个无效条目),并根据失败显示错误 如果用户名/密码正确,则需要检查用户是否首次登录应用程序(基于db中的标志),如果需要,则需要显示免责声明页面[要访问应用程序,用户应接受免责声明] 这里是流程 表单->提交->检查有效凭证中的用户名/pwd -->无-->显示错误[更新重试标志] -->是-->检查有效性-->超出

如何在进行spring安全身份验证之前检查userdetails

在我的项目中,在登录期间,我需要检查基本验证用户名/密码是否存在、用户名的有效性、最大重试限制(在该块a/c之后有5个无效条目),并根据失败显示错误

如果用户名/密码正确,则需要检查用户是否首次登录应用程序(基于db中的标志),如果需要,则需要显示免责声明页面[要访问应用程序,用户应接受免责声明]

这里是流程

表单->提交->检查有效凭证中的用户名/pwd

-->无-->显示错误[更新重试标志] -->是-->检查有效性-->超出->显示错误 -->在有效期内-->第一次检查(并接受免责声明)-->如果免责声明已被接受,则显示应用程序,否则显示免责声明页面而不登录应用程序


在“我接受”按钮上,用户登录到应用程序。

我认为这不会涉及Spring安全本身。在action类中,只需调用一个检查DB的方法。如果他们在返回操作之前已登录,则会将用户重定向到适当的页面。如果没有,请将其发送到免责声明页面

当他们提交免责声明页面的表格时,检查是否接受。如果接受,则更新数据库并将其重定向到相应页面。如果不是,则显示一个错误


如果我正确地调用了Spring安全性,则接受页面和登录页面等将不安全,但其他页面将安全。所以,就像我说的,我不确定Spring是否真的参与其中。这只是一个通过Struts操作正确路由的问题,Struts操作完成了在DB中查找和路由的所有工作。

基本上,spring security会处理它,但您可以覆盖它。 这只是一个简单的例子:

  @Autowired
private AuthenticationManager authenticationManager;

 @RequestMapping(value = "/login", method = RequestMethod.POST)
public ResponseEntity<?> login(@RequestBody AuthenticationRequest authenticationRequest, Device device) throws AuthenticationException {

    // Perform the security
    final Authentication authentication = authenticationManager.authenticate(
            new UsernamePasswordAuthenticationToken(
                    authenticationRequest.getUsername(),
                    authenticationRequest.getPassword()
            )
    ); ...
}
@Autowired
私人AuthenticationManager AuthenticationManager;
@RequestMapping(value=“/login”,method=RequestMethod.POST)
公共响应身份登录(@RequestBody AuthenticationRequest AuthenticationRequest,Device)引发AuthenticationException{
//执行安全检查
最终身份验证=authenticationManager.Authentication(
新用户名PasswordAuthenticationToken(
authenticationRequest.getUsername(),
authenticationRequest.getPassword()
)
); ...
}
AuthenticationRequest只是一个简单的对象,里面有两个字符串(用户名、密码)

请记住,此方法引发AuthenticationException,但您也可以在try/catch中捕获它,并对失败的登录执行一些逻辑


希望能有所帮助。

我正在使用j_spring_security_检查用户登录的spring security操作与我想象的略有不同。我想我会允许身份验证,然后编写一个拦截器()来捕获免责声明接受。编写一个实现拦截器的类。返回“免责声明”,例如,如果他们尚未在intercept方法中接受。struts.xml将有一个带有“免责声明”结果的部分,其类型为redirect。如果没有一个好的默认设置,您可能希望捕获他们指向的URL,这样一旦他们接受,您就可以将他们重定向到该URL。