spring security入门--基于角色实现用户登录访问简单示例三

1.说明

此处只做spring security 基于角色实现用户登录访问简单示,只为说明spring security的简单使用方法

基于权限实现用户登录访问简单示例 可以查看上一篇文章

地址:https://blog.csdn.net/qq_32224047/article/details/108597820

2.用户结构的RBAC权限模型

在任何有认证授权逻辑的系统,都需要决定用户的权限,RBAC(ROLE-BASED-ACCESS-CONTROLLER)基于角色的权限控制模型,应用最广泛.

基于权限控制,一旦用户权限发生迁移变动,变动内容次数过多,不利于系统的操作和管理.

3.代码示例

3.1项目结构

启动类代码参看示例二

3.2AdminController 中的代码,做访问跳转测试用

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
 
@RestController
public class AdminController {
    @RequestMapping("/admin/write")
    public String write() {
        return "写入数据";
    }
 
    @RequestMapping("/admin/update")
    public String update() {
        return "更新数据";
    }
 
    @RequestMapping("/admin/delete")
    public String delete() {
        return "删除数据";
    }
 
    @RequestMapping("/user/read")
    public String read() {
        return "读取数据,不需要权限";
    }
    @RequestMapping("/ther")
    public String other() {
        return "其他权限";
    }
}

 3.3MyWebSecurityConfig中的代码,相比于基于权限,这里创建guest和administrator2个角色

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.config.annotation.web.configurers.ExpressionUrlAuthorizationConfigurer;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.NoOpPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;

@Configuration
@EnableWebSecurity
public class MyWebSecurityConfig
        extends WebSecurityConfigurerAdapter {
    //明文加密器,只需要在内存中有这个管理对象,如果不添加,从前端登录时会抛出异常
    @Bean
    public PasswordEncoder passwordEncoder(){
        return NoOpPasswordEncoder.getInstance();
    }

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        // auth.userDetailsService(myUserDetailsService());
        //auth可以决定user对象的来源,可以是内存,也可以是
        //自定义从数据库读取的数据
        auth.inMemoryAuthentication()
                .withUser("user")
                .password("123456")
                .roles("guest");//底层ROLE_guest权限
                //.authorities("read","ROLE_guest");
        //roles 和authorities本质底层都是设置的权限
        //在内存用户定义时,同时存在,下面的方法值会覆盖上面的
        auth.inMemoryAuthentication()
                .withUser("admin")
                .password("123456")
                //给admin 在添加一个guest 角色
                .roles("administrator","guest");
                //.authorities("read","write","delete","update","ROLE_administrator","ROLE_guest");
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()// 开启权限控制,通过ANT规范,自定义逻辑
                //基于角色的权限控制
                .antMatchers("/admin/**").hasRole("administrator")
                .antMatchers("/user/**").hasRole("guest")
            .anyRequest()//任意请求
            .authenticated();//必须经过认证 只要登陆就能访问
        http.formLogin();//开启表单认证
        http.httpBasic();//开启http 基本认证
    }

}

 3.4启动验证

访问正常 

 通过user登录write等权限就没有,这里不再详细的验证,详细的验证请参看示例二

 

如果既要使用权限,还要使用角色,那么在authorities中继续配置即可,前面是权限,后面部分就是添加的角色

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值