JwtAuthenticationService.java 3.18 KB
Newer Older
1 2
package pwc.taxtech.atms.security;

3
import org.apache.commons.lang3.StringUtils;
4 5 6 7 8
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;
9 10 11 12
import pwc.taxtech.atms.dao.PermissionMapper;
import pwc.taxtech.atms.dao.RolePermissionMapper;
import pwc.taxtech.atms.dao.UserRoleMapper;
import pwc.taxtech.atms.entity.*;
13

14
import javax.annotation.Resource;
15
import java.util.ArrayList;
16
import java.util.Arrays;
17
import java.util.List;
18
import java.util.stream.Collectors;
19 20 21 22 23 24 25


@Service
public class JwtAuthenticationService {

    protected final Logger logger = LoggerFactory.getLogger(this.getClass());

26 27 28 29 30 31 32 33 34
    @Resource
    private UserRoleMapper userRoleMapper;

    @Resource
    private RolePermissionMapper rolePermissionMapper;

    @Resource
    private PermissionMapper permissionMapper;

35 36 37

    /**
     * 27/12/2018 11:05
38 39 40
     *
     * 用户第一个需鉴权的操作时,从UPM(目前从数据库中查询)获取用户操作权限存入EhCache,至下一次登陆前从EhCache获取权限进行操作鉴权。
     * // todo upm return  response
41 42 43 44
     * [userName]
     * @author Gary J Li
     * @return List<String>
     */
45 46
    @Cacheable(value = "apiAuthCache", key = "#userid")
    public List<String> getApiAuthList(String userid) {
47
        List<String> apiAuthList = new ArrayList<>();
48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
        // todo 1、修改角色的权限时,查询角色下的用户,刷新缓存
        UserRoleExample userRoleExample = new UserRoleExample();
        userRoleExample.createCriteria().andUserIdEqualTo(userid);
        List<UserRole> userRoles = userRoleMapper.selectByExample(userRoleExample);

        List<String> roleIds = new ArrayList<>();
        userRoles.forEach( ur ->{
            roleIds.add(ur.getRoleId());
        });
        RolePermissionExample rolePermissionExample = new RolePermissionExample();
        rolePermissionExample.createCriteria().andRoleIdIn(roleIds);
        List<RolePermission> rolePermissions = rolePermissionMapper.selectByExample(rolePermissionExample);

        List<String> permissionIds = new ArrayList<>();
        rolePermissions.forEach( rp ->{
            permissionIds.add(rp.getPermissionId());
        });
        PermissionExample permissionExample= new PermissionExample();
        permissionExample.createCriteria().andIdIn(permissionIds);
        List<Permission> permissions = permissionMapper.selectByExample(permissionExample);

        permissions.forEach(permission -> {
70
            apiAuthList.addAll(Arrays.stream(permission.getOperationPermList().split("\\|")).filter(p -> StringUtils.isNotBlank(p)).collect(Collectors.toList()));
71 72 73
        });

        logger.debug("get Cache from upm :"+"apiAuthCache-"+"key :"+userid + " value :"+String.join(",",apiAuthList));
74 75 76 77 78 79 80 81 82 83
        return apiAuthList;
    }

    /**
     * 27/12/2018 11:07
     * 用户登陆时服务器EhCache中的用户权限信息。
     * [userName]
     * @author Gary J Li
     *
     */
84 85 86
    @CacheEvict(value = "apiAuthCache", key = "#userid")
    public void removeApiAuthList(String userid) {
        logger.debug("remove Cache :"+"apiAuthCache"+"key :"+userid);
87 88 89
    }

}