F i l t e r I n v o c a t ionSecurityMetadataSourceメソッドの使用

8004 ワード

1.Collection getAttributes(Object object) throws IllegalArgumentException;
保護されたセキュリティオブジェクトobjectを取得するために必要な権限情報は、現在のSecurityMetadataSourceオブジェクトによってサポートされていない場合、例外IllegalArgumentExceptionが放出されるコンフィギュレーションオブジェクトのセットです.この方法は通常boolean supports(Class>clazz)とともに使用され、boolean supports(Class>clazz)を使用して、現在のSecurityMetadataSourceでセキュリティオブジェクトがサポートされていることを確認してから呼び出されます.
2.Collection getAllConfigAttributes()
このSecurityMetadataSourceオブジェクトに保存されているすべてのセキュリティオブジェクトに対する権限情報のセットを取得します.この方法の主な目的はAbstractSecurityInterceptorによって起動時に各ConfigAttributeオブジェクトを検証することである.
3.boolean supports(Class> clazz)
ここでclazzは、呼び出し元の現在のSecurityMetadataSourceがこのようなセキュリティオブジェクトをサポートしているかどうかを通知するためのセキュリティオブジェクトのタイプを表し、サポートされている場合にのみgetAttributesメソッドを呼び出すことができます.
@Component
public class CustomFilterInvocationSecurityMetadataSource implements FilterInvocationSecurityMetadataSource {
    @Autowired
    MenuService menuService;
    AntPathMatcher antPathMatcher = new AntPathMatcher();

    @Override
    public Collection<ConfigAttribute> getAttributes(Object object) throws IllegalArgumentException {
        String requestUrl = ((FilterInvocation) object).getRequestUrl();
        List<Menu> menus = menuService.getAllMenusWithRole();
        for (Menu menu : menus) {
            if (antPathMatcher.match(menu.getUrl(), requestUrl)) {
                List<Role> roles = menu.getRoles();
                String[] str = new String[roles.size()];
                for (int i = 0; i < roles.size(); i++) {
                    str[i] = roles.get(i).getName();
                }
                return SecurityConfig.createList(str);
            }
        }
        return SecurityConfig.createList("ROLE_LOGIN");
    }

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

    @Override
    public boolean supports(Class<?> clazz) {
        return true;
    }
}

その他のクラスは、SpringのAntPathMatcher
Spring SecurityのFilterInvocation
Spring SecurityのSecurityConfig