Spring Security实战

配置环境:

第一步:在health_parent父工程的pom.xml中导入Spring Security的maven坐标


  org.springframework.security
  spring-security-web
  ${spring.security.version}


  org.springframework.security
  spring-security-config
  ${spring.security.version}

第二步:在health_backend工程的web.xml文件中配置用于整合Spring Security框架的过滤器DelegatingFilterProx 必须加它



  
  springSecurityFilterChain
  org.springframework.web.filter.DelegatingFilterProxy


  springSecurityFilterChain
  /*

实战:

必须实现这个接口的实体类 的loadUserByUsername方法 这个方法的返回值是UserDetails 一般返回它的子类 org.springframework.security.core.userdetails.User; 里面三个属性

第一个:用户名

第二个:密码 

第三个:权限集合 List list = new ArrayList<>(); 具体的权限角色信息存储入这里返回

          查出来的权限角色添加方式: list.add(new SimpleGrantedAuthority(role.getKeyword()));用于新增(权限或角色信息)用于返回

第一步:在health_backend工程中按照Spring Security框架要求提供SpringSecurityUserService,并且实现UserDetailsService接口

package com.itheima.service;

import com.alibaba.dubbo.config.annotation.Reference;
import com.itheima.pojo.Permission;
import com.itheima.pojo.Role;
import com.itheima.pojo.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.List;
import java.util.Set;

@Component
public class SpringSecurityUserService implements UserDetailsService {

       @Reference
       private Userservice userservice;

    //根据用户名查询用户信息
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
    //根据用户名查询
       User user= userservice.findByUserName(username);
       //储存权限的集合 用于返回给securitu
        List list=new ArrayList();
       //判断
        if (user==null){ return null ;};
        //取出密码数据
        String password = user.getPassword();
//        进行权限赋值
         //1.取出用户的角色集合
        Set roleSet = user.getRoles();
        if (roleSet==null){return null;}
        //2;遍历角色集合 取出权限数据 将角色信息和权限信息 存入list集合
        for (Role role : roleSet) {
            //2.1取出角色的关键吃 进行存储
            list.add(new SimpleGrantedAuthority(role.getKeyword()));
            //2.2获得该角色的权限集合
            Set permissions = role.getPermissions();
            //2,3遍历权限集合 将它的关键字存储入list
            for (Permission permission : permissions) {
                list.add(new SimpleGrantedAuthority(permission.getKeyword()));
            }

        }

        //新建一个UserDetails的子类 存用户名 密码 权限集合 进行返回
        org.springframework.security.core.userdetails.User securityUser=new org.springframework.security.core.userdetails.User(username,password,list);
        System.out.println(securityUser);
        return securityUser;
    }
}

第二步:创建UserService服务接口、服务实现类、Dao接口、Mapper映射文件等

第三步: 第二步的东西需要根据用户名 查出来密码和权限 角色信息

内部查询需要查出来密码 和 具体的角色权限信息 用于返回信息

第四步:在health_backend工程中提供spring-security.xml配置文件




    
    
    
    
    
  
    
    
        
            
            
        
        
        
        
        
        
        
        
    

    
    

    
    
        
        
            
            
        
    

    
    

第五步

你可能感兴趣的:(传值健康,spring,java,eureka)