Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用Spring Security正确获取与用户关联的授权列表?_Java_Spring_Spring Security - Fatal编程技术网

Java 如何使用Spring Security正确获取与用户关联的授权列表?

Java 如何使用Spring Security正确获取与用户关联的授权列表?,java,spring,spring-security,Java,Spring,Spring Security,我是Spring Security的新手,在尝试检索与特定用户相关的**授权的列表时遇到以下问题 因此,我有一种方法可以检索连接的用户(这很好): 然后我试着做: ArrayList<GrantedAuthority> autorizzazioni = (ArrayList<GrantedAuthority>) getUtenteConnesso().getAuthorities(); ArrayList autorizzazioni=(ArrayList)getute

我是Spring Security的新手,在尝试检索与特定用户相关的**授权的列表时遇到以下问题

因此,我有一种方法可以检索连接的用户(这很好):

然后我试着做:

ArrayList<GrantedAuthority> autorizzazioni = (ArrayList<GrantedAuthority>) getUtenteConnesso().getAuthorities();
ArrayList autorizzazioni=(ArrayList)getuteconnesso().getAuthorities();
要检索与此用户关联的GrantedAuthority列表,但执行此方法时会引发异常

我认为问题在于,**org.springframework.security.core.userdetails.User
类中定义的getAuthorities()方法的签名是:

public Collection<GrantedAuthority> getAuthorities() {
    return authorities;
}
public Collection getAuthorities(){
返回当局;
}
因此,该方法返回一个通用的集合接口

我试图将此集合转换为阵列列表,但似乎无法工作


怎么了?我错过了什么?如何解决此问题?

接口返回集合,因此无法使用ArrayList强制转换。您必须使用集合:

Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
Collection<GrantedAuthority> authorities = authentication.getAuthorities();
Authentication Authentication=SecurityContextHolder.getContext().getAuthentication();
收集权限=authentication.getAuthories();
如果您想要一个arrayList,例如:

List<GrantedAuthority> listAuthorities = new ArrayList<GrantedAuthority>();
listAuthorities.addAll(authorities);
List listAuthories=new ArrayList();
listAuthories.addAll(authorities);
如果您对Spring的内部行为感兴趣,我将在下面详细介绍。 接口指定集合(请参见第68行):


Collection接口返回一个集合,因此不能使用ArrayList强制转换。您必须使用集合:

Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
Collection<GrantedAuthority> authorities = authentication.getAuthorities();
Authentication Authentication=SecurityContextHolder.getContext().getAuthentication();
收集权限=authentication.getAuthories();
如果您想要一个arrayList,例如:

List<GrantedAuthority> listAuthorities = new ArrayList<GrantedAuthority>();
listAuthorities.addAll(authorities);
List listAuthories=new ArrayList();
listAuthories.addAll(authorities);
如果您对Spring的内部行为感兴趣,我将在下面详细介绍。 接口指定集合(请参见第68行):


collection它不是一个列表,而是一个集合。如果您想要一个数组列表,请创建一个新的数组列表并向其中添加所有权限。它不是一个列表,而是一个集合。如果您想要一个数组列表,请创建一个新的数组并向其中添加所有权限。Tnx如此之多,只有最后一个疑问:为什么首先创建具有指定数量的自动站点的临时数组,然后将所有这些权限添加到此数组?是出于安全原因吗?为什么?如果我只是从权限集合中创建一个新数组,会发生什么?这不是我的代码,而是Spring Security的代码。我只是想展示它的工作方式,如果你有兴趣知道的话。我帖子的前两行:这是你应该做的。你不需要临时数组列表。我不知道你为什么需要arrayList,但是你可以简单地用权限集合创建一个新的arrayList,就像你建议我在你的评论后编辑了这篇文章一样。我想向您展示的是,即使您有一个集合,这个集合也可能是有序的,因为Spring在内部管理ArrayList(至少在默认情况下是这样)。在任何情况下,它是在我使用它时订购的。我希望它更清楚。@AndreaNobili在构造函数中设置
ArrayList
的初始大小是一个很好的实践,只要您预先知道所需的列表大小,因为它可以让您消除扩展内部ArrayList存储的需要,而内部ArrayList存储不是空闲的,并且您可以使用最佳内存量。Tnx这么多,最后一个疑问是:为什么首先创建具有指定数量的自动站点的临时数组,然后将所有这些授权添加到此数组中?是出于安全原因吗?为什么?如果我只是从权限集合中创建一个新数组,会发生什么?这不是我的代码,而是Spring Security的代码。我只是想展示它的工作方式,如果你有兴趣知道的话。我帖子的前两行:这是你应该做的。你不需要临时数组列表。我不知道你为什么需要arrayList,但是你可以简单地用权限集合创建一个新的arrayList,就像你建议我在你的评论后编辑了这篇文章一样。我想向您展示的是,即使您有一个集合,这个集合也可能是有序的,因为Spring在内部管理ArrayList(至少在默认情况下是这样)。在任何情况下,它是在我使用它时订购的。我希望它更清楚。@AndreaNobili在构造函数中设置
ArrayList
的初始大小是一个很好的实践,只要您预先知道所需的列表大小,因为它可以让您消除扩展内部ArrayList存储的需要,而内部ArrayList存储不是空闲的,并且您可以使用最佳内存量。
    private final Collection<GrantedAuthority> authorities;
    ...
    ArrayList<GrantedAuthority> temp = new ArrayList<GrantedAuthority>(
            authorities.size());
    temp.addAll(authorities);
    this.authorities = Collections.unmodifiableList(temp);