权限管理 SpringSecurity

能实现角色级权限:RBAC
功能级\数据级权限

基本配置 (只是用户登录就可以访问)

在这里插入图片描述

public class MyPasswordEncoder implements PasswordEncoder {
    @Override
    public String encode(CharSequence charSequence) {
        return charSequence.toString();
    }

    @Override
    public boolean matches(CharSequence charSequence, String s) {
        return s.equals(charSequence.toString());
    }
}

@Configuration
@EnableWebSecurity
public class SpringSecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    public void configure(WebSecurity web) throws Exception {
        //设置静态资源不要拦截
        web.ignoring().antMatchers("/static/**","/templates/**","/");   //设置不拦截的请求
    }


    @Override
    protected void configure(HttpSecurity http) throws Exception {   //指定那些请求要被拦截
        //设置登录,注销,表单登录不用拦截,其他请求要拦截
        http.authorizeRequests().antMatchers("/").permitAll()  //说明项目的主路径是允许直接访问的  项目的其他请求都是要经过验证的
                .anyRequest().authenticated()
                .and()
                .logout().permitAll()   //注销是任何权限都可以访问的
                .and()
                .formLogin();
        http.csrf().disable();   //关闭csrf的认证
    }

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        //可以设置内存指定的登录的账号密码,指定角色
        //不加.passwordEncoder(new MyPasswordEncoder())
        //就不是以明文的方式进行匹配,会报错
        auth.inMemoryAuthentication().withUser("admin").password("admin").roles("ADMIN");   //   指定账户名  密码和角色
        //.passwordEncoder(new MyPasswordEncoder())。
        //这样,页面提交时候,密码以明文的方式进行匹配。    才能够正常访问否则是访问不了的
        auth.inMemoryAuthentication().passwordEncoder(new MyPasswordEncoder()).withUser("dlf").password("dlf").roles("dai");
    }
}

controller

//    @EnableGlobalMethodSecurity(prePostEnabled = true)   要在controller的上面加一个这个注解  才能够使下面的注解生效

// @PreAuthorize(“hasRole(‘ROLE_ADMIN’)”) //这个路径就是指定身份的人才能够访问 身份是ADMIN 必须要加一个ROLE_ 前缀
@PreAuthorize(“hasRole(‘ROLE_ADMIN’) or hasRole(‘ROLE_USER’)”) //也可以设定多种身份
@ResponseBody
@RequestMapping("/roleAuth")
public String rile() {
return “管理员权限”;
}

@PreAuthorize("#id<10")   //用来限制传入的id必须小于10
@ResponseBody
@RequestMapping("/roleAuth")
public String rileValue(Integer id) {
    return "管理员权限";
}

 缺点**:在大数据量的情况下 几乎不可用**
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值