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); } }