Newer
Older
casic-smartcity / casic-web / src / main / java / com / casic / missiles / controller / TokenController.java
liwenhao on 27 Sep 3 KB 单点集成增加
package com.casic.missiles.controller;

import com.casic.missiles.core.application.enums.LoginType;
import com.casic.missiles.core.base.controller.BaseController;
import com.casic.missiles.core.model.auth.AuthUser;
import com.casic.missiles.core.model.auth.CasicCustomToken;
import com.casic.missiles.core.shiro.ShiroKit;
import com.casic.missiles.core.util.RSAUtils;
import com.casic.missiles.model.response.SuccessResponseData;
import com.casic.missiles.modular.domain.constants.PermissionConstants;
import com.casic.missiles.modular.interfaces.log.LogManager;
import com.casic.missiles.modular.interfaces.log.factory.LogTaskFactory;
import com.casic.missiles.modular.system.dto.LoginSuccessDTO;
import com.sinopec.siam.agent.common.SSOPrincipal;
import lombok.extern.slf4j.Slf4j;
import org.apache.shiro.subject.Subject;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.security.NoSuchAlgorithmException;
import java.util.Map;

import static com.casic.missiles.core.util.HttpContext.getIp;
import static com.sinopec.siam.agent.common.SSOPrincipal.NAME_OF_SESSION_ATTR;


/**
 * 登录使用
 *
 * @author lenovo
 */
@Controller
@RequestMapping("/route")
@Slf4j
public class TokenController extends BaseController {
    @Value("${casic.web.host}")
    private String webHost;
    /**
     * 获取mockToken
     */
    @GetMapping("/token")
    public void token(HttpSession session, HttpServletResponse response) throws IOException {

        Object obj = session.getAttribute(NAME_OF_SESSION_ATTR);
        if (obj != null) {
            super.getSession().setAttribute(PermissionConstants.IS_APP, false);
            SSOPrincipal ssoPrincipal = (SSOPrincipal) obj;
            String account = ssoPrincipal.getUid();
            login(session, response, account);
        } else {
            //此处404 未登录
            response.sendRedirect(webHost + "/smartcity/#/");
        }
    }

    private void login(HttpSession session, HttpServletResponse response, String account) throws IOException {

        Subject currentUser = ShiroKit.getSubject();
        try {
            Map<String, String> key = RSAUtils.genKeyPair();
            ShiroKit.getSession().setAttribute(PermissionConstants.PRIVATE_KEY, key.get(RSAUtils.RSAPrivateKey));
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }

        CasicCustomToken token = new CasicCustomToken(account, "");
        token.setType(LoginType.NO_PASSWD);
        token.setRememberMe(false);

        try {
            currentUser.login(token);
        } catch (Exception e) {
            e.printStackTrace();
            //TODO 此处登录异常
            response.sendRedirect(webHost + "/smartcity/#/");
        }
        AuthUser shiroUser = ShiroKit.getUser();
        super.getSession().setAttribute("shiroUser", shiroUser);
        super.getSession().setAttribute("username", shiroUser.getAccount());
        super.getSession().setAttribute(PermissionConstants.SESSION_KEY, shiroUser.getId());

        LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), getIp()));

        ShiroKit.getSession().setAttribute("sessionFlag", true);
        String sid = ShiroKit.getSession().getId().toString();
        //TODO 登录成功
        response.sendRedirect(webHost + "/smartcity/#/?sid=" + sid);

    }
}