美文网首页Spring Security Oauth2.0认证授权
21.Spring Security应用详解-授权-web授权

21.Spring Security应用详解-授权-web授权

作者: LANSHENGYANG | 来源:发表于2020-03-28 12:47 被阅读0次

    web授权

    • 在上面例子中我们完成了认证拦截,并对/r/**下的某些资源进行简单的授权保护,但是我们想进行灵活的授权控制该怎么做呢?通过给http.authorizeRequests()添加多个子节点来定制需求到我们的URL,如下代码:
    @Override
    protected void configure (HttpSecurity http) throws Exception {
    http
        .authorizeRequests()
        .antMatchers("/r/r1").hasAuthority("p1")
        .antMatchers("/r/r2").hasAuthority("p2")
        .antMatchers("/r/r3").access("hasAuthority('p1') and hasAuthority('p2')")
        .antMatchers("/r/**").authenticated()
        .anyRequest().permitAll()
        .and()
        .formLogin()
        //...
    }
    
    • (1)http.authorizeRequests()方法有多个子节点,每个macher按照他们的声明顺序执行。
    • (2)指定"/r/r1"URL,拥有p1权限能够访问
    • (3)指定"/r/r2"URL,拥有p2权限能够访问
    • (4)指定了"/r/r3"URL,拥有p1和p2权限才能够访问
    • (5)制定了除了r1,r2,r3之外"/r/**"资源,同时通过身份认证就能够访问,这里使用SpEL(Spring Expression Language)表达式。
    • (6)剩余的尚未匹配的资源,不做保护。

    注意

    • 规则的顺序是重要的,更具体的规则应该先写,现在以/admin开始的所有内容都需要具有ADMIN角色的身份验证用户,即使是/admin/login路径(因为/admin/login已经被/admin/**规则匹配,因此第二个规则被忽略)。
    .antMatchers("/admin/**").hasRole("ADMIN")
    .antMatchers("/admin/login").permitAll()
    
    • 因此,登录页面的规则应该在/admin/**规则之前,例如:
    .antMatchers("/admin/login").permitAll()
    .antMatchers("/admin/**").hasRole("ADMIN")
    
    • 保护URL常用的方法有:
    • authentication()保护URL,需要用户登录

    相关文章

      网友评论

        本文标题:21.Spring Security应用详解-授权-web授权

        本文链接:https://www.haomeiwen.com/subject/bxbjuhtx.html