SpringMVC,Restful,API,如何匹配url来控制权限

时间:2016-02-17 02:15:18

标签: java api rest spring-mvc privilege

SpringMVC,restful api

GET / order / {orderId}

POST / order / {orderId} / abc / {abcId} - {bcdId}

POST / order / {orderId} / myresource / {subResources:[a-zA-Z0-9 _ /] +}

role1可以调用api1 role2可以调用api1& api2& API3

如何匹配API路径的网址

抱歉,我的英语很差。

1 个答案:

答案 0 :(得分:0)

如果您正在使用基于Java的配置,则可以执行以下操作:

@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
            .requestMatchers(new AntPathRequestMatcher("/order/*", HttpMethod.GET.name())).hasAnyRole("ROLE1", "ROLE2")
            .requestMatchers(new AntPathRequestMatcher("/order/*/abc/*", HttpMethod.POST.name())).hasRole("ROLE2")
            .requestMatchers(new AntPathRequestMatcher("/order/*/myresource/**", HttpMethod.POST.name())).hasRole("ROLE2");
    }
}

这只显示了您可以应用于URL的基于角色的授权配置,而不是完整的Spring Security配置。关于url匹配角色授权的问题。

您可以使用许多其他RequestMatcher实现。如果蚂蚁路径匹配对你来说不够,你也可以实现自己的。

使用相同结果执行此操作的完全不同的方法是在配置文件中启用带注释@EnableGlobalMethodSecurity的全局方法安全性。然后使用服务/端点中的@Secured@PreAuthorize@PostAuthorize注释之一。例如:

@RequestMapping(value="/order/{orderId}", method=RequestMethod.GET)
@Secured(value = {"ROLE1", "ROLE2"})
public @ResponseBody Order getOrder(@PathVariable("orderId") String orderId) {
    ...
}

同样,这只是展示了如何将角色授权应用于您的端点,而不是Spring Security所需的所有配置。