2011-05-09 45 views
0

如何检查的UserDetails之前Spring Security认证是发生。如何检查用户的细节,而不会登录春季安全

这里在我的项目登录期间,我需要检查基本验证用户名/密码存在,用户名有效性,最大重试限制(5个无效的条目之后块A/C),并显示基于失败的错误。

在正确的用户名/密码,需要检查用户是否登录到应用程序的第一次(基于DB标志),如果有需要显示的免责声明页[访问应用程序的用户应该接受的免责声明。

这里是流

的用户名/密码在形式 - >提交 - >检查有效凭证

- >否 - >显示错误[更新重试标志] - >是 - - >检查有效性 - >超过─>显示错误 - >在有效期 - >检查是第一次(和免责声明接受) - >显示的应用程序,如果声明已经接受别的节目免责声明页,而无需登录到应用

我接受按钮登录用户到应用程序。

回答

0

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

当他们提交表单的免责声明页,检查验收。如果接受,则更新数据库并将其重定向到适当的页面。如果不是,则显示错误。

如果我记得春节安全正确,接受网页和登录页等,将不能保证,但其他页面会。所以,就像我说的,我不确定Spring是否真的参与其中。这只是通过您的Struts操作正确路由的问题,这些操作完成了查找数据库和路由的所有工作。

+0

进出口使用Spring的安全j_spring_security_check行动用户登录 – gnanz 2011-05-09 14:38:14

+0

有点不同比我想象的。我想我会允许认证,然后编写一个拦截器(http://cwiki.apache.org/WW/interceptors.html)来接受免责声明。编写一个实现Interceptor的类。例如,如果他们尚未接受拦截方法,请返回“免责声明”。 struts.xml中会有一个“放弃”的结果是类型重定向的<全局结果>部分。你可能想捕捉他们要去什么URL如果没有一个很好的默认,这样一旦他们接受,你可以将其重定向到URL。 – 2011-05-09 16:40:05

0

基本上,春季安全需要照顾它 - 但是你可以重写它。 这只是一个简单的例子,我怎么会做到这一点:

@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() 
      ) 
    ); ... 
} 

AutheticationRequest仅仅是一个简单的对象有两个字符串内(用户名,密码)

裸记住,这个方法抛出的AuthenticationException但你可以也可以在try/catch中捕获它,并在登录失败时执行一些逻辑。

希望它有帮助。