当角色是JSON对象时使用hasAuthority

时间:2016-08-20 12:55:35

标签: java spring spring-security

我在检查用户权限方面遇到了困难,因为该角色是JSON对象的形式。我无法访问该角色。代码如下:

@PreAuthorize("hasAuthority({'\"roleId\":\"1\",\"roleName\":\"USER\"'})")
@GET
public List<String> find() {
    return "successfully accessed";
}

1 个答案:

答案 0 :(得分:0)

我不知道是否可以使用hasAuthority指令。

但是,如果您要启动新应用程序或有可能修改现有角色处理,我建议您实施自定义角色映射器。 它看起来像这样:

@Bean
public GrantedAuthoritiesMapper myAuthoritiesMapper() {
    return authorities -> {
        return authorities.stream()
            .map(GrantedAuthority::getAuthority)
            .map(s -> {
                ObjectMapper mapper = new ObjectMapper();
                Role role = mapper.readValue(s, Role.class);
                //return roleName or custom string combination of id, name etc.
                return role.getRoleName();
            })
            .map(SimpleGrantedAuthority::new)
            .collect(toList());
    };
}

和您的角色bean类:

class Role {

    private String roleId;
    private String roleName;

    //getters and setters
}

之后你可以使用:

@PreAuthorize("hasAuthority("ROLE_USER")

(例如USER user roleName)