package com.gihon.sso.controller; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import com.gihon.common.auth.AuthUtils; import com.gihon.common.web.response.Response; import com.gihon.common.web.response.ResponseStatus; import com.gihon.sso.entity.vo.LoginUser; import com.gihon.sso.entity.vo.SsoToken; import com.gihon.sso.entity.vo.UserInfo; import com.gihon.sso.service.LoginUserService; import com.gihon.sso.service.TokenService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import lombok.extern.slf4j.Slf4j; @Api("SSO认证模块") @Slf4j @RequestMapping("${gihon.common.login-path}") @RestController public class LoginController { @Autowired private LoginUserService userService; @Autowired private TokenService tokenService; /** * 登录获取Token * * @param loginUser * @return */ @ApiOperation("SSO:登录") @PostMapping() public Response login(@RequestBody LoginUser loginUser) { log.debug("SSO登录开始:{}", loginUser.getUserAccount()); UserInfo userInfo = userService.queryUserForLogin(loginUser.getUserAccount(),loginUser.getPassWord()); SsoToken token = null; Response result = null; if(userInfo!=null) { token = tokenService.createToken(userInfo,loginUser.getMudoleType()); result = Response.ok(token); }else { result = Response.error(ResponseStatus.LOGIN_ERROR); } log.debug("SSO登录结束:{}/{}", loginUser.getUserAccount(),token); return result; } /** * 用token获取用户信息 返回用户信息或者token失效 * @param loginUser * @return */ @ApiOperation("SSO:token获取用户信息") @GetMapping("useInfo") public Response userInfo() { String token = (String)AuthUtils.getRequest().getAttribute(AuthUtils.REQ_TOKEN); UserInfo userInfo = tokenService.checkTokenInfo(token); Response result = null; if(userInfo!=null) { result = Response.ok(userInfo); }else { result = Response.error(ResponseStatus.TOKEN_EXPIRED); } return result; } /** * 登出将Token失效,并且通知所有的token相关的系统url * * @param loginUser * @return */ @ApiOperation("SSO:登出") @GetMapping("logout") public Response logOut() { String token = (String)AuthUtils.getRequest().getAttribute(AuthUtils.REQ_TOKEN); tokenService.clearToken(token); log.debug("SSO退出:{}", token); return Response.ok(); } /** * 刷新token,并且通知所有的token相关的系统url * * @param loginUser * @return */ @ApiOperation("SSO:refresh刷新token") @ApiParam(name="refreshToken",value = "refreshToken" ,required = true,type = "query") @PostMapping("refresh") public Response refreshToken(@RequestParam("refreshToken") String refreshToken) { SsoToken token = tokenService.refreshToken(refreshToken); Response result = null; if(token!=null) { result = Response.ok(token); }else { result = Response.error(ResponseStatus.REFRESH_TOKEN_EXPIRED); } return result; } }