spring Authentication.setAuthenticated(boolean)java.lang.IllegalArgumentException:无法将此令牌设置为trusted

spring Authentication.setAuthenticated(boolean)java.lang.IllegalArgumentException:无法将此令牌设置为trusted,spring,spring-security,Spring,Spring Security,我有以下代码(尝试以编程方式登录用户): 请注意,我在和对象中使用了授权的列表。我不确定我应该在哪里使用这些。我正在尝试复制的答案,但遇到了上面发布的异常。其他没有完全回答我问题的类似问题: 经过一些搜索,我发现最接近答案的是at,那个人使用的是a,但这是一种类似的方法。如何以编程方式登录用户?您不必显式调用authentication.setAuthenticated(true)(事实上,您是不允许的)。构造函数会为您执行此操作 但是,您调用了错误的构造函数。您应该拨打: Authen

我有以下代码(尝试以编程方式登录用户):

请注意,我在和对象中使用了
授权的
列表。我不确定我应该在哪里使用这些。我正在尝试复制的答案,但遇到了上面发布的异常。其他没有完全回答我问题的类似问题:


经过一些搜索,我发现最接近答案的是at,那个人使用的是a,但这是一种类似的方法。如何以编程方式登录用户?

您不必显式调用
authentication.setAuthenticated(true)
(事实上,您是不允许的)。构造函数会为您执行此操作

但是,您调用了错误的构造函数。您应该拨打:

Authentication authentication 
    = new UsernamePasswordAuthenticationToken(tempUser, password, authorities);

检查javadoc中的UsernamePasswordAuthenticationToken。

哪一行导致了问题?最后一行;上面的注释是“这是导致错误的行(
authentication.setAuthenticated(true);
)太棒了!非常感谢。我可以问一下为什么
用户
用户名密码身份验证令牌
构造函数都需要授权权限列表吗?不管怎样,它是有效的,所以当我在这里遇到两个层次的抽象冲突时,我会接受这一点。UsernamePasswordAuthenticationToken是实体的具体版本,该实体可以进行身份验证,也可以不进行身份验证(身份验证)。用户是独立于任何身份验证状态而存在的主体(用户的详细信息)的实现。遇到了相同的问题,假设我需要显式调用
setAuthenticated()
方法。因此,在调用身份验证后的意思是:身份验证=new UsernamePasswordAuthenticationToken(tempUser、password、authorities);我可以调用authentication.isAuthenticated(),它应该返回TRUE?
java.lang.IllegalArgumentException: Cannot set this token to trusted - use constructor which takes a GrantedAuthority list instead
Authentication authentication 
    = new UsernamePasswordAuthenticationToken(tempUser, password, authorities);