Search in sources :

Example 1 with UserBO

use of com.goodskill.api.bo.UserBO in project goodsKill by techa03.

the class CommonController method handleError.

@GetMapping("/")
public void handleError(HttpServletRequest request, HttpServletResponse response) throws IOException {
    Subject subject = SecurityUtils.getSubject();
    Session session = subject.getSession();
    if (subject.isAuthenticated()) {
        response.sendRedirect(HttpUrlUtil.replaceRedirectUrl(serverContextPath + "/seckill/list"));
        return;
    }
    Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
    Object obj = authentication.getPrincipal();
    String loginPath = serverContextPath + "/login";
    if (obj != null) {
        OAuth2User oAuth2User;
        try {
            oAuth2User = (OAuth2User) obj;
        } catch (Exception e) {
            log.warn(e.getMessage(), e);
            response.sendRedirect(HttpUrlUtil.replaceRedirectUrl(loginPath));
            return;
        }
        // 将已授权的第三方账户信息进行实体类转换
        OAuth2UserInfo oAuth2UserInfo = OAuth2UserInfoConverUtil.convert(oAuth2User);
        String registrationId = ((OAuth2AuthenticationToken) authentication).getAuthorizedClientRegistrationId();
        if (StringUtils.isEmpty(oAuth2UserInfo.getAccount()) || !userAuthAccountService.ifThirdAccountExists(oAuth2UserInfo.getAccount(), registrationId)) {
            response.sendRedirect(HttpUrlUtil.replaceRedirectUrl(loginPath));
            return;
        }
        // 从系统中查找第三方账户对应的用户信息
        UserBO user = userAuthAccountService.findByThirdAccount(oAuth2UserInfo.getAccount(), registrationId);
        UsernamePasswordToken usernamePasswordToken = new UsernamePasswordToken(UserAccountUtil.generateUsername(user.getAccount(), registrationId), oAuth2UserInfo.getAccount());
        try {
            subject.login(usernamePasswordToken);
            session.setAttribute("user", user);
        } catch (Exception e) {
            session.setAttribute("user", null);
            log.warn(e.getMessage(), e);
            response.sendRedirect(HttpUrlUtil.replaceRedirectUrl(loginPath));
            return;
        }
        response.sendRedirect(HttpUrlUtil.replaceRedirectUrl(serverContextPath + "/seckill/list"));
        return;
    }
    response.sendRedirect(HttpUrlUtil.replaceRedirectUrl(loginPath));
}
Also used : OAuth2User(org.springframework.security.oauth2.core.user.OAuth2User) OAuth2AuthenticationToken(org.springframework.security.oauth2.client.authentication.OAuth2AuthenticationToken) Authentication(org.springframework.security.core.Authentication) UserBO(com.goodskill.api.bo.UserBO) OAuth2UserInfo(com.goodskill.common.info.OAuth2UserInfo) Subject(org.apache.shiro.subject.Subject) IOException(java.io.IOException) Session(org.apache.shiro.session.Session) UsernamePasswordToken(org.apache.shiro.authc.UsernamePasswordToken) GetMapping(org.springframework.web.bind.annotation.GetMapping)

Example 2 with UserBO

use of com.goodskill.api.bo.UserBO in project goodsKill by techa03.

the class AuthUserRealm method doGetAuthenticationInfo.

/**
 * 提供账户信息返回认证信息
 */
@Override
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
    char[] charArray = (char[]) token.getCredentials();
    String authAccount = String.valueOf(charArray);
    String principal = (String) token.getPrincipal();
    UserBO user = userAuthAccountService.findByThirdAccount(authAccount, principal.split("-")[1]);
    if (user == null || (user.getAccount().equals(principal))) {
        // 用户名不存在抛出异常
        throw new UnknownAccountException();
    }
    String md5 = new SimpleHash("MD5", authAccount, ByteSource.Util.bytes(user.getAccount()), 2).toString();
    SimpleAuthenticationInfo authenticationInfo = new SimpleAuthenticationInfo(user.getAccount(), md5, ByteSource.Util.bytes(user.getAccount()), getName());
    return authenticationInfo;
}
Also used : UserBO(com.goodskill.api.bo.UserBO) SimpleHash(org.apache.shiro.crypto.hash.SimpleHash)

Example 3 with UserBO

use of com.goodskill.api.bo.UserBO in project goodsKill by techa03.

the class UserAuthAccountServiceImpl method findByThirdAccount.

@Override
public UserBO findByThirdAccount(String account, String sourceType) {
    UserBO userBo = new UserBO();
    UserAuthAccount userAuthAccount = baseMapper.selectOne(new LambdaQueryWrapper<UserAuthAccount>().eq(UserAuthAccount::getThirdAccountName, account).eq(UserAuthAccount::getSourceType, sourceType));
    User user = userService.getById(userAuthAccount.getUserId());
    BeanUtils.copyProperties(user, userBo);
    userBo.setThirdAccountId(userAuthAccount.getThirdAccountId());
    userBo.setSourceType(userAuthAccount.getSourceType());
    userBo.setThirdAccountName(userAuthAccount.getThirdAccountName());
    return userBo;
}
Also used : User(com.goodskill.entity.User) UserBO(com.goodskill.api.bo.UserBO) UserAuthAccount(com.goodskill.entity.UserAuthAccount)

Aggregations

UserBO (com.goodskill.api.bo.UserBO)3 OAuth2UserInfo (com.goodskill.common.info.OAuth2UserInfo)1 User (com.goodskill.entity.User)1 UserAuthAccount (com.goodskill.entity.UserAuthAccount)1 IOException (java.io.IOException)1 UsernamePasswordToken (org.apache.shiro.authc.UsernamePasswordToken)1 SimpleHash (org.apache.shiro.crypto.hash.SimpleHash)1 Session (org.apache.shiro.session.Session)1 Subject (org.apache.shiro.subject.Subject)1 Authentication (org.springframework.security.core.Authentication)1 OAuth2AuthenticationToken (org.springframework.security.oauth2.client.authentication.OAuth2AuthenticationToken)1 OAuth2User (org.springframework.security.oauth2.core.user.OAuth2User)1 GetMapping (org.springframework.web.bind.annotation.GetMapping)1