您的位置:首页 > 财经 > 金融 > 网站制作什么_上海建筑工程有限公司_网络营销过程步骤_深圳优化网站

网站制作什么_上海建筑工程有限公司_网络营销过程步骤_深圳优化网站

2025/9/18 22:13:54 来源:https://blog.csdn.net/qq_74212030/article/details/145668009  浏览:    关键词:网站制作什么_上海建筑工程有限公司_网络营销过程步骤_深圳优化网站
网站制作什么_上海建筑工程有限公司_网络营销过程步骤_深圳优化网站

1. 首先我们应该明确用户登录参数应该是在请求头里被携带到后端接口的,那么我们首先应该有一个类用于拦截请求,获取信息,如下:通过实现 Filter 重写 doFilter 方法来获取请求头中信息并放行

@RequiredArgsConstructor
public class UserTransmitFilter implements Filter {@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;String username = httpServletRequest.getHeader("username");if(StringUtils.isNotBlank(username)){String userId = httpServletRequest.getHeader("id");UserInfoDTO userInfoDTO = new UserInfoDTO(username,userId);UserContext.setUser(userInfoDTO);}try {filterChain.doFilter(servletRequest, servletResponse);} finally {UserContext.removeUser();}}
}

2.将这个过滤器注册为 Spring 的一个 Bean

@Configuration
public class UserConfiguration {/*** 用户信息传递过滤器*/@Beanpublic FilterRegistrationBean<UserTransmitFilter> globalUserTransmitFilter() {FilterRegistrationBean<UserTransmitFilter> registration = new FilterRegistrationBean<>();registration.setFilter(new UserTransmitFilter());registration.addUrlPatterns("/*");registration.setOrder(0);return registration;}}

3. 通过 ThreadLocal 保存当前线程的用户信息

public final class UserContext {private static final ThreadLocal<UserInfoDTO> USER_THREAD_LOCAL = new TransmittableThreadLocal<>();/*** 设置用户至上下文** @param user 用户详情信息*/public static void setUser(UserInfoDTO user) {USER_THREAD_LOCAL.set(user);}/*** 获取上下文中用户 ID** @return 用户 ID*/public static String getUserId() {UserInfoDTO userInfoDTO = USER_THREAD_LOCAL.get();return Optional.ofNullable(userInfoDTO).map(UserInfoDTO::getId).orElse(null);}/*** 获取上下文中用户名称** @return 用户名称*/public static String getUsername() {UserInfoDTO userInfoDTO = USER_THREAD_LOCAL.get();return Optional.ofNullable(userInfoDTO).map(UserInfoDTO::getUsername).orElse(null);}/*** 清理用户上下文*/public static void removeUser() {USER_THREAD_LOCAL.remove();}
}

主要的逻辑代码如上,大家可以根据自己的项目进行修改

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com