【问题标题】:Spring Security pass URL parameters to Authentication ProviderSpring Security 将 URL 参数传递给 Authentication Provider
【发布时间】:2013-09-01 00:17:25
【问题描述】:

有没有办法在 Spring Security 3 中将 URL 参数传递给身份验证提供程序?

我们的登录页面需要接收一个电子邮件令牌作为身份验证系统在设置用户状态时需要注意的参数。具体来说,它将允许具有正确令牌的用户登录,否则将无法登录。

我有一个扩展 DaoAuthenticationProvider 类的自定义类。我的身份验证逻辑在该类的身份验证方法中。

我希望有某种方法可以将这些数据传递给身份验证方法。

【问题讨论】:

    标签: java spring authentication spring-security


    【解决方案1】:

    您需要覆盖UsernamePasswordAuthenticationFilter.setDetails() 并通过UsernamePasswordAuthenticationTokendetails 属性将额外信息传递给您的自定义身份验证提供程序。

    【讨论】:

    • 我推荐的其他方法是在默认登录过滤器中注入自定义 authenticationDetailsS​​ource。
    • 比接受的回复更有意义。
    【解决方案2】:

    您可以在身份验证提供程序类中注入 HttpServletRequest 对象:

    private @Autowired HttpServletRequest request;
    

    现在,您应该可以使用 request.getParameterValues(paramName) 等 API 访问请求参数了

    【讨论】:

    • 另一种选择可能是弹簧的方式,但这很简单。
    • 为什么选择这个答案? HttpServletRequest 在 AuthenticationProvider 中不可用。尝试访问它会产生“未找到线程绑定请求”错误。
    • 不知道您遇到的问题。它对我有用。
    • 这对我有用,@JackB 可能你没有在 spring 安全上下文中包含 HTTPServletRequest。 Spring 上下文和 Spring 安全上下文是两个不同的概念
    猜你喜欢
    • 2018-01-29
    • 2023-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-11
    • 2019-06-18
    • 2013-03-10
    • 2012-10-08
    相关资源
    最近更新 更多