关于Rest风格的API的如何做权限控制

想要实现的效果是

比如如下两个接口
GET /order/{orderId}

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

想通过不同的角色或用户来分别限制他们能访问接口的某一个,即拥有权限的一个

现在的问题就是,通过什么样的方式能够将URL和上面的接口路径分别匹配上呢?
使用的是SpringMVC。

注:上面写的接口URL只是简单的,还有复杂的里面参数可以是正则表达式,或者两个参数通过特定字符串拼接的(如{param1}-{param2},所以匹配路径不能用正则来做,这块不太了解SpringMVC的底层是如何实现的,求大神解答。


慕勒3428872
浏览 754回答 3
3回答

森林海

怎么感觉你的问题内容和标题不是一个意思。你到底是想问权限控制还是路径识别匹配?

慕妹3242003

你必須要用實作 WebSecurityConfigurerAdapter 以我所知Spring security基礎的登入是User跟Role.每一個URL都可以通過實作 WebSecurityConfigurerAdapter的 configure(WebSecurity web)控制的。比如以下的例子帳戶在內存,登入后各資源根制可以用上hasRole()限制:        @EnableWebSecurity@Configurationpublic class CustomWebSecurityConfigurerAdapter extends   WebSecurityConfigurerAdapter {  @Autowired  public void configureGlobal(AuthenticationManagerBuilder auth) {    auth      .inMemoryAuthentication()        .withUser("user")  // #1          .password("password")          .roles("USER")          .and()        .withUser("admin") // #2          .password("password")          .roles("ADMIN","USER");  }  @Override  public void configure(WebSecurity web) throws Exception {    web      .ignoring()         .antMatchers("/resources/**"); // #3  }  @Override  protected void configure(HttpSecurity http) throws Exception {    http      .authorizeUrls()        .antMatchers("/signup","/about").permitAll() // #4        .antMatchers("/admin/**").hasRole("ADMIN") // #6        .anyRequest().authenticated() // 7        .and()    .formLogin()  // #8        .loginUrl("/login") // #9        .permitAll(); // #5  }}參考: 官方文檔
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java