Spring security 什么';这是检查用户';s在spring3控制器方法中的当前权限?

Spring security 什么';这是检查用户';s在spring3控制器方法中的当前权限?,spring-security,authority,Spring Security,Authority,“我的web服务”中的用户权限经常更改。 在这种情况下,如何有效地检查用户的权限 我编写了一些代码,暂时检查每个控制器中用户的权限。 但我认为这种方式不利于维护 如何在不在每个控制器中写入检查方法的情况下检查用户权限?不确定您在做什么-Spring Security会自动跟踪用户安全上下文中的权限。如果需要以编程方式检查其他原因,则实现HandlerInterceptor接口,并在预处理方法中调用SecurityContextHolder.getContext().getAuthenticati

“我的web服务”中的用户权限经常更改。
在这种情况下,如何有效地检查用户的权限

我编写了一些代码,暂时检查每个控制器中用户的权限。 但我认为这种方式不利于维护


如何在不在每个控制器中写入检查方法的情况下检查用户权限?

不确定您在做什么-Spring Security会自动跟踪用户安全上下文中的权限。如果需要以编程方式检查其他原因,则实现
HandlerInterceptor
接口,并在预处理方法中调用
SecurityContextHolder.getContext().getAuthentication()
,以获取当前用户。然后可以检查用户的权限

拦截器的配置如下:

<mvc:interceptors>
    <bean class="com.my.package.MyInterceptor" />
</mvc:interceptors>

拦截url
元素添加到配置中,并具有所需的角色,例如

<http auto-config='true'>
  <intercept-url pattern="/**" access="ROLE_FOO" />
</http>

用于让Spring在控制器方法中注入授权。如果用户可以拥有多个权限,则需要创建一个类来保存用户权限(可以命名为
grantedAuthories
)。完成后,控制器方法将如下所示:

@RequestMapping({"/xyz"})
public String handleXYZRequest(GrantedAuthorities authorities) {
    /* use authorities if not null */
    ...
}
在解析器中,您将使用当前用于获取权限的相同代码,它将返回null或
grantedAuthories
对象。如果您使用的是较旧版本的Spring,请使用
WebArgumentResolver
,并将其注册到AnnotationMethodHandlerAdapter

上述方法避免了代码的重复,并可用于将
SecurityContextHolder
中需要的任何内容注入控制器方法中

编辑


这与温室所采用的方法类似。请参阅,其中主体(即帐户对象)通过参数解析器注入控制器。

您也可以在此处使用尼斯包装器: