Spring Security的使用

Spring Security的使用

一、spring security是什么?

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

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

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

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

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

三、实例演示

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

 <dependencies>
     
    <dependency>
      <groupId>org.springframeworkgroupId>
      <artifactId>spring-coreartifactId>
      <version>${spring.version}version>
    dependency>
    <dependency>
      <groupId>org.springframeworkgroupId>
      <artifactId>spring-webartifactId>
      <version>${spring.version}version>
    dependency>
    <dependency>
      <groupId>org.springframeworkgroupId>
      <artifactId>spring-webmvcartifactId>
      <version>${spring.version}version>
    dependency>
    <dependency>
      <groupId>org.springframeworkgroupId>
      <artifactId>spring-context-supportartifactId>
      <version>${spring.version}version>
    dependency>
   
     
    <dependency>
      <groupId>org.springframeworkgroupId>
      <artifactId>spring-jdbcartifactId>
      <version>${spring.version}version>
    dependency>
     
     
    <dependency>
      <groupId>org.springframework.securitygroupId>
      <artifactId>spring-security-webartifactId>
      <version>4.1.0.RELEASEversion>
    dependency>
    <dependency>
      <groupId>org.springframework.securitygroupId>
      <artifactId>spring-security-configartifactId>
      <version>4.1.0.RELEASEversion>
    dependency>
     
     
    <dependency>
      <groupId>javax.servletgroupId>
      <artifactId>servlet-apiartifactId>
      <version>2.5version>
      <scope>providedscope>
    dependency>
dependencies>
  • 配置web.xml文件

    
    <context-param>
        <param-name>contextConfigLocationparam-name>
        <param-value>classpath:spring-security.xmlparam-value>
    context-param>
    
    
    <listener>
        <listener-class>
           org.springframework.web.context.ContextLoaderListener
       listener-class>
    listener>
    
     
    <filter>
       <filter-name>springSecurityFilterChainfilter-name>
       <filter-class>org.springframework.web.filter.DelegatingFilterProxyfilter-class>
    filter>
        
    
    <filter-mapping>
        
        <filter-name>springSecurityFilterChainfilter-name>
        <url-pattern>/*url-pattern>
    filter-mapping>
    
  • spring security配置文件,配置拦截规则和校验规则

    
    <http pattern="资源路径" security="none"/>
    
    
    <http use-expression="false">
        
        
        <intercept-url pattern="/**" access="ROLE_USER" />
        
        
        <form-login login-page="/自定义的登录页面" 
                    default-target-url="/登录成功后的跳转地址"
                    always-use-default-target="true"
                    authentication-failure-url="/登录失败后的跳转地址"/>
        
        
        <csrf disabled="true"/>
        
        
        <logout/>
        
        
        <headers>
    			<frame-options policy="SAMEORIGIN"/>
    	headers>
    http>
    
    
    <authentication-manager>
        <authentication-provider>
            
            <user-service>
                
                <user name="用户名" password="密码" authorities="权限"/>
            user-service>
        authentication-provider>
    authentication-manager>
    
    
    <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();
    

你可能感兴趣的:(框架)