地基代码——SSO


@Slf4j
public class SessionInterceptor implements HandlerInterceptor {

    @Value("${username}")
    private String username;
    @Value("${domain}")
    private String domain;
    @Autowired
    private MockService mockService;
    @Autowired
    private StaffService staffService;

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        // 鉴权规则匹配
        loginMatch(request, response, handler);
        return true;
    }

    private void loginMatch(HttpServletRequest request, HttpServletResponse response, Object handler) {
//        HandlerMethod handlerMethod = (HandlerMethod) handler;
//        Method method = handlerMethod.getMethod();
        // 目前只支持 SSO 登陆
        useSSOCheck(request, response);
    }

    /**
     * 使用sso验证的逻辑
     *
     * @param request
     */
    private void useSSOCheck(HttpServletRequest request, HttpServletResponse response) {
        // 获取cookie
        CookieUtil.setCookieDomain(domain);
        String ldap = CookieUtil.getCookieValue(request, kylinUsername);
        String remoteHost = request.getRemoteHost();
//        if (StringUtils.equalsAny(remoteHost, "127.0.0.1", "localhost")) {
//            ldap = "snailzhangqiushi";
//        }
        if (StringUtils.isBlank(ldap)) {
            BusinessException.throwFrom(MsgCode.COOKIE_ERROR);
        }
        UserInfoHolder.setOriginUser(ldap);
        log.info("cookie user ldap:{}", ldap);
        // 从redis中查找mock的用户
        ldap = mockService.getMockOfRedis(ldap);
        log.info("user after mock :{}", ldap);
        // 从员工中心获取用户信息
        Staff staff = staffService.getStaffInfoByLdap(ldap);
        if (Objects.isNull(staff)) {
            log.error("未获取到用户信息, ldap:{}", ldap);
            BusinessException.throwFrom(MsgCode.EMPLOYEE_REMOTE_FAIL);
        }

        StaffInfo staffInfo = DomainOrikaUtil.convert(staff, StaffInfo.class);
        UserInfoHolder.setUserInfo(staffInfo);
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        // 请求完成后删除
        UserInfoHolder.removeUserInfo();
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception e) throws Exception {
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值