【发布时间】:2014-04-20 09:36:55
【问题描述】:
我在我的 spring MVC 项目中实现了一个自定义身份验证提供程序。在我自己的重写 authenticate() 方法中,我实现了自己的身份验证,在此我构造了自己的 UserPasswordAuthenticationToken() 并返回对象。
现在上述对象“UserPasswordAuthentictionToken”中的用户ID是匿名的,密码为空,权限设置为授予该用户的权限。
问题:
这是否会导致 SecurityContextHolder 或 SecurityContext 通常丢失传递给重写的 authenticate() 方法的 Authenticate 对象中的原始传入凭据?
如果没有,我应该怎么做才能删除那些原始凭据并强制 Spring 安全上下文保存我的新匿名身份验证标识符 [当然最好与其他元数据一起]。
【问题讨论】:
-
所以身份验证提供者是根据用户名和密码对用户进行身份验证,然后清除用户名(密码已经被spring security默认清除)并保留授予的权限,这是正确的吗?如果是这样,您能否让我们知道为什么要这样做(为什么要清除用户名),因为乍一看,没有充分的理由这样做。 spring security 支持匿名身份验证,但这与您提到的docs.spring.io/spring-security/site/docs/3.0.x/reference/… 不同
-
@jhadesdev 你在各个方面都是对的。这正是我想要做的。我这样做的原因是为了防止将用户名用于业务逻辑。没什么大不了的,但任何开发人员都可以使用 jdwp [Java 调试有线协议] 来获取用户名。我担心 jdwp [Java 调试有线协议] 存在安全漏洞。我需要阅读您提供的匿名身份验证链接,但我的登录页面已配置为匿名身份验证。
标签: spring spring-security passwords credentials security-context