为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕勒3428872 2019-03-21 19:15:40
想要实现的效果是比如如下两个接口GET /order/{orderId}POST /order/{orderId}/abc/{abcId}想通过不同的角色或用户来分别限制他们能访问接口的某一个,即拥有权限的一个现在的问题就是,通过什么样的方式能够将URL和上面的接口路径分别匹配上呢?使用的是SpringMVC。注:上面写的接口URL只是简单的,还有复杂的里面参数可以是正则表达式,或者两个参数通过特定字符串拼接的(如{param1}-{param2},所以匹配路径不能用正则来做,这块不太了解SpringMVC的底层是如何实现的,求大神解答。
查看完整描述

3 回答

?
森林海

TA贡献2011条经验 获得超2个赞

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


查看完整回答
反对 回复 2019-04-16
?
慕妹3242003

TA贡献1824条经验 获得超6个赞

你必須要用實作 WebSecurityConfigurerAdapter 

以我所知Spring security基礎的登入是User跟Role.


每一個URL都可以通過實作 WebSecurityConfigurerAdapter的 configure(WebSecurity web)控制的。


比如以下的例子帳戶在內存,登入后各資源根制可以用上hasRole()限制:


        

@EnableWebSecurity

@Configuration

public 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

  }

}

參考: 官方文檔

查看完整回答
反对 回复 2019-04-16
  • 3 回答
  • 0 关注
  • 753 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信