add 权限增加是否外网展示
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
alter table sys_permission
|
||||
add external_terminal_show tinyint null comment '是否外网展示';
|
||||
update sys_permission set external_terminal_show = 1;
|
||||
update sys_permission set external_terminal_show = 0 where id in (select t.id from (SELECT id FROM `sys_permission` WHERE `parent_id` = '1437320526513905666' AND `id` <> '1437597826593595394') t);
|
||||
update sys_permission set external_terminal_show = 0 where parent_id in (select t.id from (SELECT id FROM `sys_permission` WHERE `parent_id` = '1437320526513905666' AND `id` <> '1437597826593595394') t);
|
||||
update sys_permission set external_terminal_show = 0 where id = 'd7d6e2e4e2934f2c9385a623fd98c6f3';
|
||||
|
||||
+1
-6
@@ -15,11 +15,6 @@ public enum LoginType {
|
||||
private String type;
|
||||
|
||||
public static LoginType getEnum(String type){
|
||||
for (LoginType value : values()) {
|
||||
if (value.getType().equals(type)) {
|
||||
return value;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
return LoginType.INSIDE.getType().equals(type) ? LoginType.INSIDE : LoginType.EXTERNAL;
|
||||
}
|
||||
}
|
||||
|
||||
+24
-1
@@ -63,7 +63,19 @@ public class JwtUtil {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获得token中的信息无需secret解密也能获得
|
||||
*
|
||||
* @return token中包含的用户名
|
||||
*/
|
||||
public static String getLoginType(String token) {
|
||||
try {
|
||||
DecodedJWT jwt = JWT.decode(token);
|
||||
return jwt.getClaim("loginType").asString();
|
||||
} catch (JWTDecodeException e) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
/**
|
||||
* 生成签名,5min后过期
|
||||
*
|
||||
@@ -79,6 +91,17 @@ public class JwtUtil {
|
||||
|
||||
}
|
||||
|
||||
public static String sign(String username, String loginType, String secret) {
|
||||
Date date = new Date(System.currentTimeMillis() + EXPIRE_TIME);
|
||||
Algorithm algorithm = Algorithm.HMAC256(secret);
|
||||
// 附带username信息
|
||||
return JWT.create()
|
||||
.withClaim("username", username)
|
||||
.withClaim("loginType", loginType)
|
||||
.withExpiresAt(date).sign(algorithm);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 生成签名,5min后过期
|
||||
*
|
||||
|
||||
+13
-5
@@ -108,7 +108,7 @@ public class ShiroRealm extends AuthorizingRealm {
|
||||
throw new AuthenticationException("token为空!");
|
||||
}
|
||||
// 校验token有效性
|
||||
LoginUser loginUser = this.checkUserTokenIsEffect(token);
|
||||
LoginUser loginUser = this.checkUserTokenIsEffect(token,(JwtToken) auth);
|
||||
JwtToken jwtToken = (JwtToken) auth;
|
||||
LoginType loginType = jwtToken.getLoginType();
|
||||
loginUser.setLoginType(loginType);
|
||||
@@ -120,7 +120,7 @@ public class ShiroRealm extends AuthorizingRealm {
|
||||
*
|
||||
* @param token
|
||||
*/
|
||||
public LoginUser checkUserTokenIsEffect(String token) throws AuthenticationException {
|
||||
public LoginUser checkUserTokenIsEffect(String token, JwtToken jwtToken) throws AuthenticationException {
|
||||
// 解密获得username,用于和数据库进行对比
|
||||
String username = JwtUtil.getUsername(token);
|
||||
if (username == null) {
|
||||
@@ -138,7 +138,8 @@ public class ShiroRealm extends AuthorizingRealm {
|
||||
// throw new AuthenticationException("账号已被锁定,请联系管理员!");
|
||||
//}
|
||||
// 校验token是否超时失效 & 或者账号密码是否错误
|
||||
if (!jwtTokenRefresh(token, username, loginUser.getPassword())) {
|
||||
|
||||
if (!jwtTokenRefresh(token, username, loginUser.getPassword(),jwtToken)) {
|
||||
throw new AuthenticationException("Token失效,请重新登录!");
|
||||
}
|
||||
|
||||
@@ -156,9 +157,10 @@ public class ShiroRealm extends AuthorizingRealm {
|
||||
*
|
||||
* @param userName
|
||||
* @param passWord
|
||||
* @param jwtToken
|
||||
* @return
|
||||
*/
|
||||
public boolean jwtTokenRefresh(String token, String userName, String passWord) {
|
||||
public boolean jwtTokenRefresh(String token, String userName, String passWord, JwtToken jwtToken) {
|
||||
if (userName.startsWith(LoginUserTypeEnum.company_management_.toString())){
|
||||
String cacheToken = String.valueOf(redisUtil.get(CommonConstant.PREFIX_USER_TOKEN + userName));
|
||||
if (oConvertUtils.isNotEmpty(cacheToken)) {
|
||||
@@ -177,12 +179,18 @@ public class ShiroRealm extends AuthorizingRealm {
|
||||
}else{
|
||||
String cacheToken = String.valueOf(redisUtil.get(CommonConstant.PREFIX_USER_TOKEN + userName));
|
||||
if (oConvertUtils.isNotEmpty(cacheToken)) {
|
||||
String type = JwtUtil.getLoginType(cacheToken);
|
||||
LoginType loginType1 = LoginType.getEnum(type);
|
||||
LoginType loginType2 = jwtToken.getLoginType();
|
||||
if (loginType1.equals(loginType2)){
|
||||
|
||||
}else
|
||||
if (!token.equals(cacheToken)){
|
||||
throw new AuthenticationException("已在其它设备登录,请重新登录!");
|
||||
}
|
||||
// 校验token有效性
|
||||
if (!JwtUtil.verify(cacheToken, userName, passWord)) {
|
||||
String newAuthorization = JwtUtil.sign(userName, passWord);
|
||||
String newAuthorization = JwtUtil.sign(userName, type, passWord);
|
||||
// 设置超时时间
|
||||
redisUtil.set(CommonConstant.PREFIX_USER_TOKEN + userName, newAuthorization);
|
||||
redisUtil.expire(CommonConstant.PREFIX_USER_TOKEN + userName, JwtUtil.EXPIRE_TIME *2 / 1000);
|
||||
|
||||
+1
-1
@@ -74,7 +74,7 @@ public class JwtFilter extends BasicHttpAuthenticationFilter {
|
||||
authenticationUtils.check(pushToken,publicKey);
|
||||
}else {
|
||||
// update-end--Author:lvdandan Date:20210105 for:JT-355 OA聊天添加token验证,获取token参数
|
||||
String externalTerminalShow = httpServletRequest.getHeader("externalTerminalShow");
|
||||
String externalTerminalShow = httpServletRequest.getHeader("Externalterminalshow");
|
||||
LoginType loginType = LoginType.getEnum(externalTerminalShow);
|
||||
JwtToken jwtToken = new JwtToken(token,loginType);
|
||||
// 提交给realm进行登入,如果错误他会抛出异常并被捕获
|
||||
|
||||
+2
-1
@@ -82,7 +82,7 @@ public class LoginController {
|
||||
|
||||
@ApiOperation("登录接口")
|
||||
@RequestMapping(value = "/login", method = RequestMethod.POST)
|
||||
public Result<JSONObject> login(@RequestBody SysLoginModel sysLoginModel) {
|
||||
public Result<JSONObject> login(@RequestBody SysLoginModel sysLoginModel,HttpServletRequest request) {
|
||||
Result<JSONObject> result = new Result<>();
|
||||
String username = sysLoginModel.getUsername();
|
||||
String password = sysLoginModel.getPassword();
|
||||
@@ -159,6 +159,7 @@ public class LoginController {
|
||||
return result;
|
||||
}
|
||||
//用户登录信息
|
||||
sysUser.setLoginType(request.getHeader("Externalterminalshow"));
|
||||
sysUserService.userInfo(sysUser, result);
|
||||
//update-begin--Author:wangshuai Date:20200714 for:登录日志没有记录人员
|
||||
LoginUser loginUser = new LoginUser();
|
||||
|
||||
@@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.annotation.TableLogic;
|
||||
import com.fasterxml.jackson.annotation.JsonIgnore;
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import com.jero.common.aspect.annotation.Dict;
|
||||
import com.jero.common.constant.enums.LoginType;
|
||||
import com.jero.common.util.PasswordUtil;
|
||||
import com.jero.common.util.superSearch.ConstantUtils;
|
||||
import com.jero.modules.system.volid.group.CreateGroup;
|
||||
@@ -233,6 +234,9 @@ public class SysUser implements Serializable {
|
||||
@TableField(exist = false)
|
||||
private String verifyPassword;
|
||||
|
||||
@TableField(exist = false)
|
||||
private String loginType;
|
||||
|
||||
public String convertisEmail(){
|
||||
if (StringUtils.isNotBlank(email)){
|
||||
return PasswordUtil.decrypt(email);
|
||||
|
||||
+2
-1
@@ -727,8 +727,9 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
|
||||
public Result<JSONObject> userInfo(SysUser sysUser, Result<JSONObject> result) {
|
||||
String syspassword = sysUser.getPassword();
|
||||
String username = sysUser.getUsername();
|
||||
String loginType = sysUser.getLoginType();
|
||||
// 生成token
|
||||
String token = JwtUtil.sign(username, syspassword);
|
||||
String token = JwtUtil.sign(username, loginType, syspassword);
|
||||
// 设置token缓存有效时间
|
||||
redisUtil.set(CommonConstant.PREFIX_USER_TOKEN + username, token);
|
||||
redisUtil.expire(CommonConstant.PREFIX_USER_TOKEN + username, JwtUtil.EXPIRE_TIME * 2 / 1000);
|
||||
|
||||
Reference in New Issue
Block a user