Spring Security的授权&鉴权

简介: 该文档介绍了授权和鉴权的概念,主要分为Web授权和方法授权。Web授权通过URL拦截进行,而方法授权利用注解控制权限,粒度更细但耦合度高。在Web授权的案例中,展示了如何在Spring Security中对特定URL设置角色控制。此外,还列举了Spring Security内置的控制操作方法,如permitAll()、denyAll()和hasRole()等,用于定义不同类型的用户访问权限。

授权&鉴权

授权的方式包括 web授权和方法授权

  • web授权是通过 url 拦截进行授权,重点学习内容
  • 方法授权是通过方法拦截进行授权,通过注解的方式控制权限,粒度小,耦合度高

WEB授权

案例

我们可以做个例子,演示一下

1. 准备工作,修改HelloController,增加两个方法 (根据hello方法复制后修改即可),主要是为了方便后边进行测试

@RequestMapping("/hello/user")
public String helloUser(){
    Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
    String name = authentication.getName();
    return "hello-user  "+name;
}
@RequestMapping("/hello/admin")
public String helloAdmin(){
    Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
    String name = authentication.getName();
    return "hello-admin  "+name;
}

2. 修改 SecurityConfig 的securityFilterChain方法  ,添加对以上两个地址的角色控制

@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
    http.formLogin()             //自定义自己编写的登陆页面
        .loginPage("/login.html")    //登录页面设置
        .loginProcessingUrl("/login") //登录访问路径
        .permitAll()//登录页和登录访问路径无需登录也可以访问
        .and()
        .authorizeRequests()
        .antMatchers("/css/**","/images/**").permitAll()
        .antMatchers("/hello/user").hasRole("USER")
        .antMatchers("/hello/admin").hasAnyRole("ADMIN")
        .anyRequest().authenticated()
        .and()
        .csrf().disable();    //关闭csrf防护
    return http.build();
}


3. 测试

分别使用user和admin用户登录

  • user用户可以访问 /hello/user
  • admin用户可以访问  /hello/user/hello/admin

2. 控制操作方法【了解】

上文只是将请求接口路径与配置的规则进行匹配,那匹配成功之后应该进行什么操作呢?Spring Security 内置了一些控制操作。

  • permitAll() 方法,所有用户可访问。
  • denyAll() 方法,所有用户不可访问。
  • authenticated() 方法,登录用户可访问。
  • anonymous() 方法,匿名用户可访问。
  • rememberMe() 方法,通过 remember me 登录的用户可访问。
  • fullyAuthenticated() 方法,非 remember me 登录的用户可访问。
  • hasIpAddress(String ipaddressExpression) 方法,来自指定 IP 表达式的用户可访问。
  • hasRole(String role) 方法, 拥有指定角色的用户可访问,传入的角色将被自动增加 “ROLE_”   前缀。
  • hasAnyRole(String... roles) 方法,拥有指定任意角色的用户可访问。传入的角色将被自动增加 “ROLE_” 前缀。
  • hasAuthority(String authority) 方法,拥有指定权限( authority )的用户可访问。
  • hasAnyAuthority(String... authorities) 方法,拥有指定任意权限( authority )的用户可访问。


目录
相关文章
|
4月前
|
安全 Java 数据安全/隐私保护
使用Spring Security实现细粒度的权限控制
使用Spring Security实现细粒度的权限控制
|
4月前
|
安全 Java 数据库
实现基于Spring Security的权限管理系统
实现基于Spring Security的权限管理系统
|
4月前
|
安全 Java 数据安全/隐私保护
解析Spring Security中的权限控制策略
解析Spring Security中的权限控制策略
|
3月前
|
安全 Java 数据库
|
3月前
|
NoSQL 安全 Java
Java Spring Boot中使用Shiro、JWT和Redis实现用户登录鉴权
Java Spring Boot中使用Shiro、JWT和Redis实现用户登录鉴权
|
3月前
|
Java Spring
Spring Boot Admin 授权配置
Spring Boot Admin 授权配置
31 0
|
4月前
|
安全 Java 数据安全/隐私保护
使用Spring Security实现细粒度的权限控制
使用Spring Security实现细粒度的权限控制
|
4月前
|
安全 Java 数据安全/隐私保护
使用Java和Spring Security实现身份验证与授权
使用Java和Spring Security实现身份验证与授权
|
4月前
|
存储 安全 Java
Spring Security在企业级应用中的应用
Spring Security在企业级应用中的应用
|
5月前
|
存储 安全 Java
Spring Security与OAuth2集成开发
Spring Security与OAuth2集成开发