Spring Security--基于表达式的访问控制 access的使用

编程知识 更新时间:2023-04-06 11:25:57

文章目录

  •     基于表达式的访问控制
    •       1 access()方法使用
        •       1.1 以 hasRole 和 permitAll 举例
    •        2 使用自定义方法
    •    接口
    •      实现类
    •   修改配置项

    基于表达式的访问控制

      1 access()方法使用

      之前的登录用户权限判断实际上底层实现都是调用 access(表达式)
      可以通过 access()实现和之前学习的权限控制完成相同的功能。

      1.1 以 hasRole 和 permitAll 举例

      下面代码和直接使用 permitAll()和 hasRole()是等效的。

       2 使用自定义方法

      虽然这里面已经包含了很多的表达式(方法)但是在实际项目中很 有可能出现需要自己自定义逻辑的情况。
      判断登录用户是否具有访问当前 URL 权限

   接口

public interface MyAccess {
    boolean hasPermit(HttpServletRequest request, Authentication authentication);
}

     实现类

@Component
public class MyAccessImpl implements  MyAccess {
    @Override
    public boolean hasPermit(HttpServletRequest request, Authentication authentication) {
        Collection<? extends GrantedAuthority> authorities = authentication.getAuthorities();
        return authorities.contains(new SimpleGrantedAuthority(request.getRequestURI()));
    }
}

  修改配置项

      最后一项 ==.anyRequest().authenticated(); ==需要被注释,因为所有配置项取得是交集,如果这一项在的话就表示只要认证就可以访问了

 //授权:权限控制
        http.authorizeRequests()
                .antMatchers("/login.html").permitAll() // login.html 这个请求不需要认证
                .antMatchers("/fail.html").permitAll()  // fail.html 这个请求不需要认证
             .anyRequest().access("@myAccessImpl.hasPermit(request,authentication)");
//                .anyRequest().authenticated(); // 所有的请求都必须被认证

更多推荐

Spring Security--基于表达式的访问控制 access的使用

本文发布于:2023-04-06 11:25:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/689ff6ba1ddca10a0ba4a65a6135e0f2.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:表达式   访问控制   Spring   Security   access

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!

  • 49304文章数
  • 14阅读数
  • 0评论数