对比新文件 |
| | |
| | | package com.gk.firework.Controller; |
| | | |
| | | import cn.hutool.core.lang.Dict; |
| | | import cn.hutool.core.util.ObjectUtil; |
| | | import cn.hutool.core.util.StrUtil; |
| | | import cn.hutool.http.HttpRequest; |
| | | import com.alibaba.fastjson.JSON; |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import com.gk.firework.Config.Oauth2.IRedisService; |
| | | import com.gk.firework.Config.Oauth2.OauthRole; |
| | | import com.gk.firework.Config.Oauth2.RedisKeyEnum; |
| | | import com.gk.firework.Domain.AuthorizationInfo; |
| | | import com.gk.firework.Domain.Log.JsonParams; |
| | | import com.gk.firework.Domain.Utils.CommonUtil; |
| | | import com.gk.firework.Domain.Utils.Msg; |
| | | import com.gk.firework.Domain.Utils.StringUtils; |
| | | import com.gk.firework.Domain.Vo.UserVo; |
| | | import com.gk.firework.Service.AuthorizationService; |
| | | import com.gk.firework.Service.EnterpriseService; |
| | | import com.gk.firework.Service.UserService; |
| | | import com.google.common.base.Strings; |
| | | import com.google.common.net.HttpHeaders; |
| | | import io.jsonwebtoken.Claims; |
| | | import io.swagger.annotations.Api; |
| | | import io.swagger.annotations.ApiOperation; |
| | | import io.swagger.annotations.ApiParam; |
| | | import org.apache.commons.collections4.map.SingletonMap; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.beans.factory.annotation.Value; |
| | | import org.springframework.web.bind.annotation.*; |
| | | import springfox.documentation.annotations.ApiIgnore; |
| | | |
| | | import javax.servlet.http.HttpServletRequest; |
| | | import java.nio.charset.StandardCharsets; |
| | | import java.util.*; |
| | | |
| | | @Api(tags = "登录登出接口") |
| | | @RequestMapping("/auth") |
| | | @RestController |
| | | public class LoginController { |
| | | @Autowired |
| | | IRedisService redisService; |
| | | @Autowired |
| | | UserService userService; |
| | | @Autowired |
| | | AuthorizationService authorizationService; |
| | | @Autowired |
| | | EnterpriseService enterpriseService; |
| | | @Value("${host}") |
| | | private String host; |
| | | /** |
| | | * login produces = "application/json" |
| | | * |
| | | * @param jsonParam {"username":"用户名","password":"密码"} |
| | | * @return User |
| | | */ |
| | | @PostMapping("/login") |
| | | @JsonParams |
| | | @ApiOperation(value = "管理端登录授权", notes = "登录授权接口,获取token") |
| | | public Msg login(@ApiParam(value = "username,password") @RequestParam String encryptStr) { |
| | | String jsonStr = new String(Base64.getDecoder().decode(encryptStr), StandardCharsets.UTF_8); |
| | | JSONObject jsonParam = JSON.parseObject(jsonStr); |
| | | |
| | | String username = jsonParam.getString("username"); |
| | | String password = jsonParam.getString("password"); |
| | | |
| | | Msg msg = new Msg(); |
| | | msg.setCode("200"); |
| | | msg.setMessage("success"); |
| | | try { |
| | | //query user |
| | | UserVo user = userService.selectUserVoByName(username); |
| | | if (null == user) { |
| | | msg.setCode("100"); |
| | | msg.setMessage("用户不存在"); |
| | | return msg; |
| | | } |
| | | |
| | | if (user.getIssale() == 1) { |
| | | msg.setCode("100"); |
| | | msg.setMessage("用户不存在"); |
| | | return msg; |
| | | } |
| | | |
| | | if (StringUtils.isNotBlank(user.getCompanynumber()) && enterpriseService.isLogOut(user.getCompanynumber())) { |
| | | msg.setCode("166"); |
| | | msg.setMessage("用户已注销"); |
| | | return msg; |
| | | } |
| | | // 疆外日期判断 |
| | | Date now = new Date(); |
| | | if (user.getDeadline() != null) { |
| | | if (user.getDeadline().before(now)){ |
| | | // 当前已经疆外用户已经超期使用 需要缴费 |
| | | msg.setCode("200"); |
| | | msg.setMessage("疆外用户已过期,请及时联系续期"); |
| | | msg.setResult(new SingletonMap<>("deadline",user.getDeadline())); |
| | | return msg; |
| | | } |
| | | |
| | | } |
| | | |
| | | |
| | | //Call login interface |
| | | String rs = HttpRequest.post( host + "/oauth/token") |
| | | .setConnectionTimeout(10000) |
| | | .setReadTimeout(10000) |
| | | .header("Authorization", "Basic dWFhLXNlcnZpY2U6MTIzNDU2") |
| | | .form(Dict.create() |
| | | .set("username", username) |
| | | .set("password", password) |
| | | .set("grant_type", "password") |
| | | .set("auth_type", "") |
| | | ).execute().body(); |
| | | Map map = JSON.parseObject(rs, Map.class); |
| | | Object access_token = map.get("access_token"); |
| | | //Verify that the access_token is empty |
| | | if (ObjectUtil.isNull(access_token)) { |
| | | msg.setCode("103"); |
| | | msg.setMessage("密码不正确"); |
| | | return msg; |
| | | } |
| | | user.setToken("Bearer "+access_token); |
| | | //add redis |
| | | String token_key = StrUtil.format(RedisKeyEnum.AUTH_TOKEN.getKey(), map.get("jti")); |
| | | redisService.set(token_key, user, 60L*60L*18L); |
| | | |
| | | user.setTokenexpired(60L*60L*18L); |
| | | /** 登录成功刷新用户 */ |
| | | List<OauthRole> roleByUser = userService.selectRoleByUser(1); |
| | | if (null != user.getType()&& user.getType() == 1){ |
| | | OauthRole oauthRole = new OauthRole("","超级管理员","super_admin",""); |
| | | roleByUser.add(oauthRole); |
| | | user.setRoles(roleByUser); |
| | | }else { |
| | | roleByUser = userService.selectRoleByUser(user.getId().intValue()); |
| | | user.setRoles(roleByUser); |
| | | } |
| | | user.setPassword(null); |
| | | msg.setResult(user); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | msg.setCode("102"); |
| | | msg.setMessage("登录失败请稍后重试"); |
| | | } |
| | | return msg; |
| | | } |
| | | |
| | | @PostMapping("/salelogin") |
| | | @ApiOperation(value = "销售端登录授权", notes = "登录授权接口,获取token") |
| | | public Msg Salelogin(@ApiParam(value = "username,password") @RequestBody JSONObject jsonParam) { |
| | | String username = jsonParam.getString("username"); |
| | | String password = jsonParam.getString("password"); |
| | | |
| | | Msg msg = new Msg(); |
| | | msg.setCode("200"); |
| | | msg.setMessage("success"); |
| | | try { |
| | | //query user |
| | | UserVo user = userService.selectUserVoByName(username); |
| | | if (null == user) { |
| | | msg.setCode("100"); |
| | | msg.setMessage("用户不存在"); |
| | | return msg; |
| | | } |
| | | |
| | | if (user.getIssale() == 0) { |
| | | msg.setCode("100"); |
| | | msg.setMessage("用户不存在"); |
| | | return msg; |
| | | } |
| | | |
| | | if (user.getStatus()!=null && user.getStatus() != 1){ |
| | | msg.setCode("100"); |
| | | msg.setMessage("用户已失效"); |
| | | return msg; |
| | | } |
| | | |
| | | if (user.getExpiredate() != null && user.getExpiredate().getTime() < System.currentTimeMillis()){ |
| | | msg.setCode("100"); |
| | | msg.setMessage("用户已失效"); |
| | | return msg; |
| | | } |
| | | |
| | | // 疆外日期判断 |
| | | Date now = new Date(); |
| | | if (user.getDeadline() != null) { |
| | | if (user.getDeadline().before(now)) { |
| | | // 当前已经疆外用户已经超期使用 需要缴费 |
| | | msg.setCode("166"); |
| | | msg.setMessage("疆外用户已过期,请及时联系续期"); |
| | | return msg; |
| | | } |
| | | |
| | | } |
| | | //Call login interface |
| | | String rs = HttpRequest.post( host + "/oauth/token") |
| | | .setConnectionTimeout(10000) |
| | | .setReadTimeout(10000) |
| | | .header("Authorization", "Basic dWFhLXNlcnZpY2U6MTIzNDU2") |
| | | .form(Dict.create() |
| | | .set("username", username) |
| | | .set("password", password) |
| | | .set("grant_type", "password") |
| | | .set("auth_type", "") |
| | | ).execute().body(); |
| | | Map map = JSON.parseObject(rs, Map.class); |
| | | Object access_token = map.get("access_token"); |
| | | //Verify that the access_token is empty |
| | | if (ObjectUtil.isNull(access_token)) { |
| | | msg.setCode("103"); |
| | | msg.setMessage("密码不正确"); |
| | | return msg; |
| | | } |
| | | user.setToken("Bearer "+access_token); |
| | | //add redis |
| | | String token_key = StrUtil.format(RedisKeyEnum.AUTH_TOKEN.getKey(), map.get("jti")); |
| | | redisService.set(token_key, user, 60L*60L*18L); |
| | | user.setTokenexpired(60L*60L*18L); |
| | | user.setPassword(null); |
| | | msg.setResult(user); |
| | | } catch (Exception e) { |
| | | msg.setCode("102"); |
| | | msg.setMessage("登录失败请稍后重试"); |
| | | } |
| | | return msg; |
| | | } |
| | | |
| | | @GetMapping("/verify") |
| | | @ApiOperation(value = "登录验证", notes = "登录验证:flag【true 成功】,【false 失败】", response = Msg.class) |
| | | public Msg verifyLogin(@ApiIgnore HttpServletRequest request) { |
| | | Msg msg = new Msg(); |
| | | msg.setCode("200"); |
| | | UserVo userVo = new UserVo(); |
| | | String token = request.getHeader(HttpHeaders.AUTHORIZATION); |
| | | //解析token |
| | | Claims claims = CommonUtil.parseJWT(token); |
| | | if (null != claims){ |
| | | String tokenKey = StrUtil.format(RedisKeyEnum.AUTH_TOKEN.getKey(), claims.getId()); |
| | | Object userInfo = redisService.get(tokenKey); |
| | | if (null != userInfo){ |
| | | Map map = JSON.parseObject(userInfo.toString(), Map.class); |
| | | |
| | | userVo = userService.selectUserVoByName(map.get("username").toString()); |
| | | if (null == userVo) { |
| | | msg.setCode("100"); |
| | | msg.setMessage("用户不存在"); |
| | | return msg; |
| | | } |
| | | |
| | | if (userVo.getIssale() == 1){ |
| | | if (userVo.getStatus()!=null && userVo.getStatus() != 1){ |
| | | msg.setCode("100"); |
| | | msg.setMessage("用户已失效"); |
| | | return msg; |
| | | } |
| | | |
| | | if (userVo.getExpiredate() != null && userVo.getExpiredate().getTime() < System.currentTimeMillis()){ |
| | | msg.setCode("100"); |
| | | msg.setMessage("用户已失效"); |
| | | return msg; |
| | | } |
| | | |
| | | Object loginObj = map.get("logintime"); |
| | | Object authObj = map.get("auth"); |
| | | if (loginObj != null && authObj != null){ |
| | | //通过auth查询授权码最后登录时间 |
| | | AuthorizationInfo authInfo = authorizationService.selectByUser(userVo.getCompanynumber(),authObj.toString()); |
| | | if (authInfo == null){ |
| | | msg.setCode("100"); |
| | | msg.setMessage("授权码无效"); |
| | | return msg; |
| | | } |
| | | |
| | | if (authInfo.getLasttime().getTime() > Long.parseLong(loginObj.toString())){ |
| | | redisService.set(tokenKey, userInfo, 0L); |
| | | msg.setCode("100"); |
| | | msg.setMessage("登录失效,请重新登录"); |
| | | return msg; |
| | | } |
| | | } |
| | | userVo.setAuth(map.get("auth").toString()); |
| | | } |
| | | else { |
| | | /** 登录成功刷新用户 */ |
| | | List<OauthRole> roleByUser = userService.selectRoleByUser(1); |
| | | if (null != userVo.getType()&& userVo.getType() == 1){ |
| | | OauthRole oauthRole = new OauthRole("","超级管理员","super_admin",""); |
| | | roleByUser.add(oauthRole); |
| | | userVo.setRoles(roleByUser); |
| | | }else { |
| | | roleByUser = userService.selectRoleByUser(userVo.getId().intValue()); |
| | | userVo.setRoles(roleByUser); |
| | | } |
| | | } |
| | | userVo.setToken(map.get("token").toString()); |
| | | userVo.setTokenexpired(60L*60L*18L); |
| | | userVo.setPassword(null); |
| | | //更新登录超时时间 |
| | | redisService.set(tokenKey, userInfo, 60L*60L*18L); |
| | | }else { |
| | | msg.setCode("100"); |
| | | msg.setMessage("登录失效,请重新登录"); |
| | | return msg; |
| | | } |
| | | } |
| | | msg.setResult(userVo); |
| | | return msg; |
| | | } |
| | | |
| | | /** |
| | | * logout |
| | | * |
| | | * @return |
| | | */ |
| | | @PostMapping("/logout") |
| | | @ApiOperation(value = "退出登录", notes = "退出登录接口", produces = "application/json", response = Msg.class) |
| | | public Msg logout(@ApiIgnore HttpServletRequest request) { |
| | | Msg msg = new Msg(); |
| | | msg.setCode("200"); |
| | | msg.setMessage("success"); |
| | | /** 解析token */ |
| | | String header = request.getHeader(HttpHeaders.AUTHORIZATION); |
| | | if (header != null && !header.equals("undefined")) { |
| | | Claims claims = CommonUtil.parseJWT(header); |
| | | Optional.ofNullable(claims).ifPresent(cl -> { |
| | | String token_key = "auth:token:" + cl.getId(); |
| | | redisService.remove(token_key); |
| | | }); |
| | | } |
| | | return msg; |
| | | } |
| | | |
| | | @PostMapping("/saleauthlogin") |
| | | @JsonParams |
| | | @ApiOperation(value = "销售端授权码登录授权", notes = "登录授权接口,获取token") |
| | | public Msg SaleAuthlogin(@ApiParam(value = "username,password,authcode") @RequestParam String encryptStr) { |
| | | // System.out.println("BASE64明文: "+encryptStr); |
| | | String jsonStr = new String(Base64.getDecoder().decode(encryptStr), StandardCharsets.UTF_8); |
| | | // System.out.println("解密后参数: "+jsonStr); |
| | | JSONObject jsonParam = JSON.parseObject(jsonStr); |
| | | String username = jsonParam.getString("username"); |
| | | String password = jsonParam.getString("password"); |
| | | String auth = jsonParam.getString("authcode"); |
| | | |
| | | // System.out.println("name: "+username+" ,pwd: "+password+" ,auth:"+auth); |
| | | |
| | | Msg msg = new Msg(); |
| | | msg.setCode("200"); |
| | | msg.setMessage("success"); |
| | | try { |
| | | //query user |
| | | UserVo user = userService.selectUserVoByName(username); |
| | | if (null == user) { |
| | | msg.setCode("100"); |
| | | msg.setMessage("用户不存在"); |
| | | return msg; |
| | | } |
| | | |
| | | if (user.getIssale() == 0) { |
| | | msg.setCode("100"); |
| | | msg.setMessage("用户不存在"); |
| | | return msg; |
| | | } |
| | | |
| | | if (user.getStatus()!=null && user.getStatus() != 1){ |
| | | msg.setCode("100"); |
| | | msg.setMessage("用户已失效"); |
| | | return msg; |
| | | } |
| | | |
| | | if (user.getExpiredate() == null ||(user.getExpiredate() != null && user.getExpiredate().getTime() < System.currentTimeMillis())){ |
| | | msg.setCode("100"); |
| | | msg.setMessage("用户已失效"); |
| | | return msg; |
| | | } |
| | | |
| | | // 疆外日期判断 |
| | | Date now = new Date(); |
| | | if (user.getDeadline() != null) { |
| | | if (user.getDeadline().before(now)) { |
| | | // 当前已经疆外用户已经超期使用 需要缴费 |
| | | msg.setCode("166"); |
| | | msg.setMessage("疆外用户已过期,请及时联系续期"); |
| | | return msg; |
| | | } |
| | | |
| | | } |
| | | |
| | | //验证auth是否存在 |
| | | AuthorizationInfo authInfo = authorizationService.selectByUser(user.getCompanynumber(),auth); |
| | | if (authInfo == null){ |
| | | msg.setCode("100"); |
| | | msg.setMessage("授权码无效"); |
| | | return msg; |
| | | } |
| | | |
| | | Date logintime = new Date(); |
| | | //Call login interface |
| | | String rs = HttpRequest.post( host + "/oauth/token") |
| | | .setConnectionTimeout(10000) |
| | | .setReadTimeout(10000) |
| | | .header("Authorization", "Basic dWFhLXNlcnZpY2U6MTIzNDU2") |
| | | .form(Dict.create() |
| | | .set("username", username) |
| | | .set("password", password) |
| | | .set("auth", auth) |
| | | .set("grant_type", "password") |
| | | .set("auth_type", "") |
| | | ) |
| | | .execute() |
| | | .body(); |
| | | Map map = JSON.parseObject(rs, Map.class); |
| | | Object access_token = map.get("access_token"); |
| | | //Verify that the access_token is empty |
| | | if (ObjectUtil.isNull(access_token)) { |
| | | msg.setCode("103"); |
| | | msg.setMessage("密码不正确"); |
| | | return msg; |
| | | } |
| | | user.setToken("Bearer "+access_token); |
| | | user.setAuth(auth); |
| | | user.setLogintime(logintime.getTime()); |
| | | //add redis |
| | | String token_key = StrUtil.format(RedisKeyEnum.AUTH_TOKEN.getKey(), map.get("jti")); |
| | | redisService.set(token_key, user, 60L*60L*18L); |
| | | user.setTokenexpired(60L*60L*18L); |
| | | user.setPassword(null); |
| | | msg.setResult(user); |
| | | |
| | | //更新auth最后登录时间 |
| | | authInfo.setLasttime(logintime); |
| | | authorizationService.updateById(authInfo); |
| | | } catch (Exception e) { |
| | | msg.setCode("102"); |
| | | msg.setMessage("登录失败请稍后重试"); |
| | | } |
| | | return msg; |
| | | } |
| | | |
| | | |
| | | } |