spring-boot-security

安全框架   

          在java开发领域,常见的安全管理框架有apache shiro和spring security。shiro是相对spring security是轻量级的,提供了认证、授权,会话管理,密码管理、缓存管理等功能,spring security相对复杂点,功能比shiro更加强大,权限控制可以更精细,对OAuth2的支持也更友好,与spring框架无缝整合

spring security

简单用法

官网demo
官网security架构

依赖

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>
        <!-- 必须引入starter-web 否则不是web项目,不可能localhost:8080访问,连错误页面都没有-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

登录页面

访问 http://localhost:8080,出现了security的登录页面,不管是什么URL都跳登录,默认用户名是user,默认密码是每次启动项目随机生成

// 启动时,生成随机密码
Using generated security password: 6a83bc58-fad7-4a16-94a3-9bd73d6a2f2f

如果不想使用随机密码,可以在yml中配

spring:
  security:
    user:  # 如果有了基于内存的认证,则此处配置不生效
      name: admin  
      password: admin
      roles: admin

postman访问成功

基于内存的认证

@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Bean
    PasswordEncoder passwordEncoder() {
        return NoOpPasswordEncoder.getInstance(); //如果没有的话,会报java.lang.IllegalArgumentException: There is no PasswordEncoder mapped for the id "null"
    }

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception { //这是基于内存的配置,则yml中配置的不生效
        auth.inMemoryAuthentication()
                .withUser("admin3").password("admin3").roles("ADMIN", "USER")
                .and()
                .withUser("user").password("123").roles("USER");
    }
}

 

如果你发现访问任何页面,都出现了上面的登录页面,八成是引入了security,删除security即可解决,如果是因为其他的依赖引入了security,就不太好删除了,这时,下面的配置类可以解决,重写 WebSecurityConfigurerAdapter即可

@Configuration
public class SecurityConfig {
    @Bean
    public WebSecurityConfigurerAdapter webSecurityConfigurerAdapter() {
        return new WebSecurityConfigurerAdapter() {
            @Override
            protected void configure(HttpSecurity http) throws Exception {
                http.authorizeRequests()
                        .anyRequest().permitAll();
            }
        };
    }
}

 

基于角色的权限管理
  代表一系列行为或责任的实体,限定能做什么,不能做什么,往往跟用户账号有关
  解决方案有
  1.Apache Shiro   使用简单
  2.spring security 功能强大 兼容性强 spring家族
  <p>
  RBAC  基于角色的访问控制 Role-Based-Access-Control,
  隐式访问  如果是某个角色就显示按钮,否则不显示,如果角色的名称改了,代码也要修改
  显式访问  如果拥有某种权限就显示按钮,否则不显示
  spring security
  核心概念
  认证 authentication :认证是建立主体(principal)的过程,主体通常是指可以在您的应用程序中执行操作的用户、设备或其他系统
  授权 authorization:或称为访问控制 授权是指决定是否允许主体在应用程序中执行操作
  spring security 提供以下认证
  1.HTTP BASIC
  2.HTTP DIGEST
  3.HTTP x.509
  4.ldap 基于表单的认证
  5.openId
  6.单点登陆
  7.remember-me
  8.匿名身份登陆
  9.run-as
  10.JAAS
  11.Java EE容器认证
  模块
  spring-security-core
  spring-security-remoting
  spring-security-web
  spring-security-config
  spring-security-ldap
  spring-security-acl 特定对象的实例进行安全配置
  spring-security-cas 单点登陆
  spring-security-openId 社会化的登陆
  spring-security-test 主要用与测试

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章