为什么 Authentication 转换成 UsernamePasswordAuthenticationToken,只有第一次成功,后面就报类型不一样,不能转换
时间: 2023-06-19 13:08:26 浏览: 101
在 Spring Security 中,用户身份验证成功后,会将用户信息保存在一个 Authentication 对象中。当用户在后续的请求中进行访问时,需要对其进行身份验证。此时,Spring Security 会从请求中获取用户信息并创建一个新的 Authentication 对象,然后将其与之前保存的 Authentication 对象进行比较,以确保用户身份验证成功。
在进行身份验证时,Spring Security 会将用户信息封装在一个具体的 Authentication 实现类中。例如,如果用户使用的是用户名和密码进行身份验证,则 Spring Security 会将用户信息封装在一个 UsernamePasswordAuthenticationToken 对象中。
如果您在身份验证成功后将 Authentication 对象保存在 HttpSession 中,并且在后续的请求中从 HttpSession 中获取该对象,则在进行身份验证时,需要将其转换回具体的 Authentication 实现类。例如,在您的应用程序中,可能需要将 Authentication 对象转换回 UsernamePasswordAuthenticationToken。
如果您第一次成功将 Authentication 对象转换为 UsernamePasswordAuthenticationToken,但在后续的请求中出现类型不匹配的错误,则可能是因为在 HttpSession 中保存的 Authentication 对象与当前请求中的 Authentication 对象类型不同。这可能是因为您在应用程序中使用了多个身份验证提供程序,每个提供程序都使用不同的 Authentication 实现类。在这种情况下,您需要根据请求中的身份验证提供程序将 Authentication 对象转换为正确的实现类。
阅读全文