1、使用ThreadLocal管理用户对象,创建工具类。此类getCurrentUser方法可在任意类中调用获取当前登录信息,当然此信息需借助spring的拦截器进行设置用户和删除用户。
public class ThreadLocalUtil { /** * 保存用户对象的ThreadLocal 在拦截器操作 添加、删除相关用户数据 */ private static final ThreadLocal<SysUser> userThreadLocal = new ThreadLocal<SysUser>(); /** * 添加当前登录用户方法 在拦截器方法执行前调用设置获取用户 * @param sysUser */ public static void addCurrentUser(SysUser sysUser){ // System.out.println("当前用户"+sysUser.getUserUserName()); userThreadLocal.set(sysUser); } /** * 获取当前登录用户方法 */ public static SysUser getCurrentUser(){ return userThreadLocal.get(); } /** * 删除当前登录用户方法 在拦截器方法执行后 移除当前用户对象 */ public static void remove(){ userThreadLocal.remove(); } } |
2、新建spring拦截器,在请求前的方法中设置用户对象,在请求后的方法中删除用户对象。
@Component public class SysInterceptor implements HandlerInterceptor { /** * 请求执行前执行的 * @param request * @param response * @param handler * @return * @throws Exception */ @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { // System.out.println("拦截器执行------"); /** * 请求前设置过滤 */ SysUser sysUser = (SysUser) request.getSession().getAttribute("sysUser"); ThreadLocalUtil.addCurrentUser(sysUser); return true; } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { /** * 请求后执行 */ ThreadLocalUtil.remove(); } } 3、可结合文章一种的用户对象,修改preInsert、preUpdate方法;(备注:此处是新增和修改数据记录操作用户,查询时也可根据此用户判断数据级权限。)
备注:文章一链接:https://blog.csdn.net/a718089112/article/details/103888543 |