Spring Security的使用

Spring Security的使用

一、spring security是什么?

​ spring家族中的一款权限校验、安全框架,可以和spring无缝整合

二、为什么要是用安全框架,不使用可以吗?

​ 安全框架实际就是对过滤器做了代理增强,简化我们的拦截校验代码,同时简化我们在对RBAC的代码操作

三、什么是权限管理,如何从数据库层面出发设计权限管理?

  • 权限管理指的是,对当前用户可以进行的可执行操作的管理
  • 三表模式:直接为每一位赋予对应的权限
    • 用户名、用户权限表 、权限表
  • 五表模式:将用户分组引入角色
    • 用户表、用户角色表、角色表、角色权限表、权限表
  • 根据需求可在细分七表、九表等

三、实例演示

  • 导入依赖
<properties>
	    <spring.version>4.2.4.RELEASE</spring.version>
</properties>

 <dependencies>
     <!--spring-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-core</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-web</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context-support</artifactId>
      <version>${spring.version}</version>
    </dependency>
   
     <!--数据库链接-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-jdbc</artifactId>
      <version>${spring.version}</version>
    </dependency>
     
     <!--spring security-->
    <dependency>
      <groupId>org.springframework.security</groupId>
      <artifactId>spring-security-web</artifactId>
      <version>4.1.0.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework.security</groupId>
      <artifactId>spring-security-config</artifactId>
      <version>4.1.0.RELEASE</version>
    </dependency>
     
     <!--web-->
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>servlet-api</artifactId>
      <version>2.5</version>
      <scope>provided</scope>
    </dependency>
</dependencies>
  • 配置web.xml文件

    <!--加载配置文件的路径-->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:spring-security.xml</param-value>
    </context-param>
    
    <!--配置文件的加载方式-->
    <listener>
        <listener-class>
           org.springframework.web.context.ContextLoaderListener
       </listener-class>
    </listener>
    
     <!---security的过滤器的代理对象-->
    <filter>
       <filter-name>springSecurityFilterChain</filter-name>
       <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
    </filter>
        
    <!--拦击的路径-->
    <filter-mapping>
        <!--springSecurityFilterChain是固定的名称-->
        <filter-name>springSecurityFilterChain</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    
  • spring security配置文件,配置拦截规则和校验规则

    <!--开放的不用登陆成功就可以访问的资源-->
    <http pattern="资源路径" security="none"/>
    
    <!--登陆和注销的拦截业务处理 use-expression是否使用表达式写法-->
    <http use-expression="false">
        
        <!--那些资源要具有那些相应的权限 intercept-url资源路径-->
        <intercept-url pattern="/**" access="ROLE_USER" />
        
        <!-- always-use-default-target登录成功后是返回登录之前的资源,还是default-target-url-->
        <form-login login-page="/自定义的登录页面" 
                    default-target-url="/登录成功后的跳转地址"
                    always-use-default-target="true"
                    authentication-failure-url="/登录失败后的跳转地址"/>
        
        <!--关闭跨站点请求-->
        <csrf disabled="true"/>
        
        <!--注销,注销后跳转到登录页面-->
        <logout/>
        
        <!--如果页面使用了frameset或者iframe则需要添加下面的配置-->
        <headers>
    			<frame-options policy="SAMEORIGIN"/>
    	</headers>
    </http>
    
    <!-- 配置文件形式的认证管理器 -->
    <authentication-manager>
        <authentication-provider>
            <!--指定固定的权限-->
            <user-service>
                <!--权限要是用大写,如:ROLE_USER-->
                <user name="用户名" password="密码" authorities="权限"/>
            </user-service>
        </authentication-provider>
    </authentication-manager>
    
    <!-- 自定义用户信息认证管理器 实现 UserDetailService接口 -->
    <authentication-manager>
        <authentication-provider user-service-ref="userDetailService">	
        </authentication-provider>	
    </authentication-manager>
    	
    <!-- 定义自定义认证类 -->
    <beans:bean id="userDetailService" class="com.youlexuan.service.UserDetailsServiceImpl"></beans:bean>
    
  • 自定义实现用户认证管理

    /**
     *
     * @param s 当前登录的用户名
     * @return
     * @throws UsernameNotFoundException
     */
    @Override
    public UserDetails loadUserByUsername(String s) throws UsernameNotFoundException {
        //todo(根据当前登录的用户名s,查询数据库中对应用户的信息)
        return new User("用户名","密码",权限集合);
    }
    
  • security的加密

    <authentication-provider user-service-ref='userDetailService'>   
    	<!--添加加密配置-->
        <password-encoder ref="bcryptEncoder"></password-encoder>	   		
    </authentication-provider>
    
    <!--加密实现类-->
    <beans:bean id="bcryptEncoder"  
            class="org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder" />
    
    //密码加密
    BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
    String password = passwordEncoder.encode(seller.getPassword());
    seller.setPassword(password);
    
  • 登录成功后获取当前用户的信息

    String name=SecurityContextHolder.getContext().getAuthentication().getName();
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值