春季安全性+ JWT:服务器重新启动后获取主体

时间:2018-12-28 15:33:17

标签: spring spring-security

我有一个前置应用程序(角度)。对于身份验证部分,我使用spring安全性oauth。我还使用JWT令牌。 所有的身份验证表单(创建帐户,登录,更改密码...)都在Spring端处理。

如果我在登录时重新启动身份验证服务器,然后在前端应用程序上导航,那么由于我的JWT不会过期,一切仍然可以正常工作。

我有一个WS可以访问“更改密码”表格。该WS需要身份验证:

.antMatchers("/user/updatePassword").authenticated()

如果我在身份验证服务器重新启动后立即立即调用“ / user / updatePassword” WS,则不再认为我已通过身份验证,然后将我重定向到登录表单->这样就可以了

但是,如果我执行这种情况:

  • 登录后重新启动身份验证服务器

  • 在Angular上导航一下->一些令牌有效性请求发送到身份验证服务器。

  • 身份验证服务器将Authentication.isAuthenticated()设置为true(因为令牌仍然有效)。

  • 尝试调用“ / user / updatePassword”以显示“更改密码”表单

此时

SecurityContextHolder.getContext().getAuthentication().isAuthenticated() ==真

但是

 SecurityContextHolder.getContext().getAuthentication().getPrincipal()

包含一个User对象,但其中只包含空值,因此我无法识别当前用户,也无法检查旧密码的有效性。

我必须在某处错过某些东西,但是我找不到什么地方?也许我应该以其他方式获得当前用户,但我不知道如何。

0 个答案:

没有答案