【问题标题】:Recover username and password with spring security使用 Spring Security 恢复用户名和密码
【发布时间】:2015-07-25 20:00:57
【问题描述】:

我在我的 Web 应用程序中使用 Spring Security。 我正处于恢复用户名和密码的阶段。

用例:

当用户忘记他们的密码时,他们将无法登录。
如何通过spring security向spring发送请求?

问题是 spring security 不会让任何事情通过,除非 logged in 和 authenticated。

我目前在我的配置中使用以下内容:

@Override
public void configure(WebSecurity web) throws Exception {
    web.ignoring().antMatchers("/loginrecover/**"); 
}

我认为这完全超出了安全范围并且很容易受到攻击。

还有其他方法可以实现吗?

【问题讨论】:

  • 我认为没有别的办法。总是会出现在未经授权的用户应该有权请求密码重置的页面。
  • 当用户忘记他的密码时,他应该被发送到一个密码重置页面,在那里他输入他的 UID 或电子邮件地址和一个秘密问题的答案,然后通过电子邮件向他发送一个包含过期票证的链接这将使他登录并带他进入密码重置页面,就像他已经登录一样。任何允许任何人,甚至是用户,检索他自己当前密码的系统都是不可挽回的,完全被破坏了。
  • @EJP "任何允许...的系统"那么您认为解决方法应该是什么?
  • @EJP 那是一次逃跑。 . .我认为您评论的第二部分打算低估/贬低第一部分,我的错。但无论如何,我从来没有打算通过邮件/手机或任何其他方式向用户发送密码,我想到的和你刚才解释的完全一样,但我担心任何知道电子邮件和/或秘密的人问题可以更改密码并拥有完全访问权限。 . .
  • @EJP 我的想法是通过向用户发送一封带有过期 url 参数的电子邮件,他们可以通过后台程序登录来访问应用程序作为保存。

标签: java spring spring-mvc spring-security


【解决方案1】:

我会用:

    @Override
    protected void configure(HttpSecurity http) throws Exception {
    http.authorizeRequests().antMatchers("/loginrecover").permitAll()
...}

使用 permitAll 您不会禁用安全过滤器。 Spring Security 相关功能仍然可用。

使用 ignoring() 可以完全禁用该请求路径的安全过滤器链。 Spring Security 功能将不可用。这是安全性“无”的 java 配置。 这应该只用于静态资源。

是的,它是相似的,你需要一个未经授权的网站。但正确的方法是禁用访问而不是过滤器。

【讨论】:

  • 我看不出这和我的代码有什么区别,因为没有 formLogin 或任何东西,spring security 如何通过这个来保证安全?
  • 过滤器提供什么,增强?
  • 在您的应用程序中没有真正的区别。例如,要求通道、当前用户或调用安全方法等安全功能将不可用。
  • 好吧,在对您的问题进行一些研究之后,您的问题可能会更好,因为您可以使用 IS_AUTHENTICATED_ANONYMOUSLY。请看baeldung.com/security-none-filters-none-access-permitAll
  • 是的,我读过这篇文章,但这种访问并没有给我太多帮助,在我的脑海里,我担心应用程序会受到攻击
猜你喜欢
  • 2014-11-24
  • 2011-12-12
  • 2014-12-21
  • 2020-01-21
  • 1970-01-01
  • 2022-07-18
  • 2012-02-08
  • 2015-03-09
  • 2017-04-04
相关资源
最近更新 更多