Grails Spring Security获取当前页面的角色

Grails Spring Security获取当前页面的角色,grails,spring-security,Grails,Spring Security,我想知道是否有人知道一种优雅的方法来获取spring安全插件中所有可以访问当前页面的角色 我使用的是spring安全性,它被配置为使用RequestMap域对象 我的应用程序中的权限非常复杂,所以我想在每个页面的底部制作一个标签,显示使用该页面所需的角色 我正在查询请求映射,但我想确保匹配url的方式与插件的方式相同 理想情况下,我根本不需要运行查询 Grails版本2.2.1 Spring安全插件版本1.2.7.3 提前感谢我通过在src/java中添加以下两个类实现了这一点 第一类 impo

我想知道是否有人知道一种优雅的方法来获取spring安全插件中所有可以访问当前页面的角色

我使用的是spring安全性,它被配置为使用RequestMap域对象

我的应用程序中的权限非常复杂,所以我想在每个页面的底部制作一个标签,显示使用该页面所需的角色

我正在查询请求映射,但我想确保匹配url的方式与插件的方式相同

理想情况下,我根本不需要运行查询

Grails版本2.2.1 Spring安全插件版本1.2.7.3


提前感谢

我通过在src/java中添加以下两个类实现了这一点

第一类

import org.springframework.security.access.ConfigAttribute;
import org.springframework.security.web.FilterInvocation;
import org.springframework.security.web.access.intercept.FilterInvocationSecurityMetadataSource;

import javax.servlet.http.HttpServletRequest;
import java.util.Collection;

public class MyFilterInvocationSecurityMetadataSource implements FilterInvocationSecurityMetadataSource {

FilterInvocationSecurityMetadataSource oldBean;

@Override
public Collection<ConfigAttribute> getAttributes(Object o) throws IllegalArgumentException {
    FilterInvocation filterInvocation = (FilterInvocation) o;
    HttpServletRequest request = filterInvocation.getHttpRequest();
    request.setAttribute("PAGEROLES", oldBean.getAttributes(filterInvocation));

    return oldBean.getAttributes(o);
}

@Override
public Collection<ConfigAttribute> getAllConfigAttributes() {
    return oldBean.getAllConfigAttributes();
}

@Override
public boolean supports(Class<?> aClass) {
    return FilterInvocation.class.isAssignableFrom(aClass);
}

public Object getOldBean() { return oldBean; }
public void setOldBean(FilterInvocationSecurityMetadataSource oldBean) { this.oldBean = oldBean; }
}
然后,我将以下内容添加到resources.groovy中

beans = {
      filterSecurityMDSExtractor(FilterSecurityMDSExtractor)
}
基本上,我是在请求中填充用户角色

request.setAttribute("PAGEROLES", oldBean.getAttributes(filterInvocation));
那么我所要做的就是打电话给下面的人

request.getAttribute("PAGEROLES");
把角色放回去。我从Stackoverflow上的其他优秀帖子中剽窃,拼凑出了我的解决方案。其他人可能有更好的解决方案,但到目前为止,这对我来说是可行的

request.getAttribute("PAGEROLES");