自学内容网 自学内容网

Spring Security框架如何授权

一、授权

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

  • web授权是通过 url 拦截进行授权,重点学习内容

  • 方法授权是通过方法拦截进行授权,通过注解的方式控制权限,粒度小,耦合度高

1、WEB授权
(1)、案例

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

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 )的用户可访问。


原文地址:https://blog.csdn.net/susjj663/article/details/140623604

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!