我有一个登录页面,用户需要在其中输入以下信息VIN号,电子邮件,邮政编码和accessCode,它们将从不同的应用程序获取。
因此,要验证用户,我需要自定义UserDetailsService类中的所有信息,然后将调用一个过程来验证用户身份。
UserDetailsService
但是我看到当我实现UserDetailsService下面的代码时
@Component public class LoginService implements UserDetailsService { @Autowired LoginStoredProcedureDao loginStoredProcedureDao; public Map<String, Object> verifyLogin(LoginDetails details) { return loginStoredProcedureDao.verifyLogin(details); } @Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { // TODO Auto-generated method stub //verifyLogin(); return null; } }
loginDetails对象如下所示
public class LoginDetails { String vin; String email; String zipcode; String accessCode; }
在以上情况下如何使用spring安全。用户在这里需要提供所有信息以验证自己。
首先,我将以不同的方式解决您的问题。我会进行多步骤身份验证。第一个是使用spring security的默认模型的传统用户名/密码登录。第二步是显示另一个表单,用户必须填写该表单以提供身份验证的其他详细信息,您的应用程序希望执行此操作。
无论如何,如果您想继续自定义spring安全模型,以单步询问登录的更多详细信息。请遵循@Petr中上一个答案中的步骤参考。然后要访问您的UserDetailsService类中的会话属性,请使用Spring提供的http://static.springsource.org/spring/docs/2.0.8/api/org/springframework/web/context/request/RequestContextHolder.html类。
您可以访问currentRequestAttributes(),返回一个RequestAttributes对象。您可以查询RequestAttributes对象,以从所需范围中获取所需属性。
currentRequestAttributes()
RequestAttributes
注意:这是静态方法,这意味着它对单元测试不友好。
您还可以将RequestAttributes转换为ServletRequestAttributes是否要访问基础HttpServletRequest
ServletRequestAttributes
HttpServletRequest
希望这可以帮助。