作者 朱兆平

用户缓存存储优化,登录成功会根据用户名缓存用户token,根据token缓存用户具体信息.

新增用户锁定接口
... ... @@ -90,11 +90,27 @@ public class UserController {
public ResultJson updateUserById(@Validated(UpdateUser.class) @RequestBody KakoUser user){
user.setPassword(null);
int i = userService.updateByPrimaryKeySelective(user);
ResultJson resultJson = new ResultJson();
return i==1 ? new ResultJson("200","success") :new ResultJson("500","update faild");
}
@LogAnnotation(moduleName = "用户锁定",operate = "用户锁定")
@PutMapping("/lock")
public ResultJson lockUserById(@Validated(UpdateUser.class) @RequestBody KakoUser user){
KakoUser kakoUser = new KakoUser();
kakoUser.setId(user.getId());
kakoUser.setLoginFlag(user.getLoginFlag());
int i = userService.updateByPrimaryKeySelective(kakoUser);
//删除用户token缓存 及时生效锁定账号
if (i>0){
String userTokenStr = redisUtils.get(KakoUser.TOKEN_KEY + user.getLoginName());
redisUtils.del(userTokenStr);
}
return i==1 ? new ResultJson("200","success") :new ResultJson("500","lock user faild");
}
@LogAnnotation(moduleName = "用户管理",operate = "用户密码修改")
@PutMapping("/password")
public ResultJson updateUserPassById(@RequestBody KakoUser user){
... ... @@ -114,7 +130,6 @@ public class UserController {
}
int i = userService.insertSelective(user);
ResultJson resultJson = new ResultJson();
return i==1 ? new ResultJson("200","新建账户成功") :new ResultJson("500","insert faild");
}
... ... @@ -124,7 +139,6 @@ public class UserController {
public ResultJson delUser(@RequestBody KakoUser user,HttpServletRequest request,HttpServletResponse response){
//String username = getusername();
int i = userService.deleteByPrimaryKey(user);
ResultJson resultJson = new ResultJson();
return i==1 ? new ResultJson("200","删除账户成功") :new ResultJson("500","delete faild");
}
... ...
... ... @@ -13,6 +13,7 @@ public interface KakoUserMapper {
KakoUser selectByPrimaryKey(String id);
int updateByPrimaryKeySelective(KakoUser record);
int updateByPrimaryKey(KakoUser record);
... ... @@ -21,7 +22,9 @@ public interface KakoUserMapper {
List<KakoUser> selectAllUser(KakoUser record);
List<KakoUser> selectOnlineUser();
int lockUser(KakoUser record);
}
\ No newline at end of file
}
... ...
... ... @@ -18,6 +18,8 @@ import java.util.Date;
import java.util.List;
public class KakoUser implements UserDetails {
public static String TOKEN_KEY = "user:";
private String id;
private String companyId;
... ... @@ -67,6 +69,8 @@ public class KakoUser implements UserDetails {
private String token;
private Boolean online;
@JSONField(serialzeFeatures= {SerializerFeature.WriteMapNullValue,SerializerFeature.WriteNullStringAsEmpty})
private List<ROLE> roles;
... ... @@ -269,6 +273,14 @@ public class KakoUser implements UserDetails {
this.token = token;
}
public Boolean getOnline() {
return online;
}
public void setOnline(Boolean online) {
this.online = online;
}
/**
*
* @return 账户未过期
... ... @@ -327,4 +339,4 @@ public class KakoUser implements UserDetails {
}
return auths;
}
}
\ No newline at end of file
}
... ...
... ... @@ -53,9 +53,11 @@ public class MyKakoAuthenticationSuccessHandler extends SavedRequestAwareAuthent
@Autowired
RedisUtils redisUtils;
@Override
public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws ServletException, IOException {
logger.info("登录成功");
int expirationSeconds = 3600*24*7;
if (LoginType.JSON.equals(securityProperties.getBrowser().getLoginType())){
//将 authention 信息打包成json格式返回
response.setContentType("application/json;charset=UTF-8");
... ... @@ -77,7 +79,8 @@ public class MyKakoAuthenticationSuccessHandler extends SavedRequestAwareAuthent
loginedUser.setToken(jwtToken);
//这里将登录成功的[user]对象数据写入redis缓存,KEY为token value为user的JSON对象
String json = JSON.toJSONString(user);
redisUtils.set(jwtToken, json,3600*24*7);
redisUtils.set(jwtToken, json,expirationSeconds);
redisUtils.set(KakoUser.TOKEN_KEY + user.getUsername(),jwtToken,expirationSeconds);
Map<String,Object> menuMap = permissionService.getUserMenusKako(user.getId());
//返回用户信息和用户可访问的目录列表
response.getWriter().write(objectMapper.writeValueAsString(new AuthSuccessResponse(loginedUser,menuMap)));
... ...
... ... @@ -23,11 +23,12 @@
<result column="update_date" property="updateDate" jdbcType="TIMESTAMP" />
<result column="remarks" property="remarks" jdbcType="VARCHAR" />
<result column="del_flag" property="delFlag" jdbcType="CHAR" />
<result column="online" property="online" jdbcType="BOOLEAN" />
</resultMap>
<sql id="Base_Column_List" >
id, company_id, office_id, login_name, password, no, name, email, phone, mobile,
user_type, photo, login_ip, login_date, login_flag, create_by, create_date, update_by,
update_date, remarks, del_flag
update_date, remarks, del_flag, online
</sql>
<select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.String" >
select
... ... @@ -54,6 +55,14 @@
from sys_user
where login_name = #{login_name,jdbcType=VARCHAR}
</select>
<select id="selectOnlineUser" resultMap="BaseResultMap" >
select
<include refid="Base_Column_List" />
from sys_user
where online > 0;
</select>
<update id="deleteByPrimaryKey" parameterType="java.lang.String" >
update sys_user
set
... ... @@ -274,6 +283,9 @@
<if test="delFlag != null" >
del_flag = #{delFlag,jdbcType=CHAR},
</if>
<if test="online != null" >
online = #{online,jdbcType=BOOLEAN},
</if>
</set>
where id = #{id,jdbcType=VARCHAR}
</update>
... ... @@ -298,7 +310,8 @@
update_by = #{updateBy,jdbcType=VARCHAR},
update_date = #{updateDate,jdbcType=TIMESTAMP},
remarks = #{remarks,jdbcType=VARCHAR},
del_flag = #{delFlag,jdbcType=CHAR}
del_flag = #{delFlag,jdbcType=CHAR},
online = #{online,jdbcType=BOOLEAN}
where id = #{id,jdbcType=VARCHAR}
</update>
... ...