问:如何读写cookie?
答案:在Java Web开发中,可以通过HttpServletResponse的addCookie()方法来写入Cookie,通过HttpServletRequest的getCookies()方法来读取Cookie。
问:●
如何保存用户信息(如session,如将用户标识与userId保存缓存)?
答案:●
使用Session保存用户信息:// 将用户信息保存到Session中
HttpSession session = request.getSession();
session.setAttribute("userId", userId);
使用缓存保存用户信息// 例如使用Redis等缓存服务
redisTemplate.opsForValue().set("userId:" + userId, userInfo);
问:●
识别的用户身份信息,如何供整个访问链路使用?
答案:可以通过Filter来识别用户身份信息,并将身份信息存储到ThreadLocal中,在整个访问链路中共享。
●
在Filter中识别用户身份信息,并存储到ThreadLocal中:
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) servletRequest;
// 识别用户身份信息
String userId = ...; // 从请求中获取用户ID等信息
// 将用户身份信息存储到ThreadLocal中
ReqInfoContext.setUserId(userId);
try {
filterChain.doFilter(servletRequest, servletResponse);
} finally {
// 清除ThreadLocal中的用户身份信息
ReqInfoContext.clear();
}
}
在整个访问链路中获取用户身份信息:
public class ReqInfoContext {
private static final ThreadLocal
public static String getUserId() {
return userIdThreadLocal.get();
}
public static void setUserId(String userId) {
userIdThreadLocal.set(userId);
}
public static void clear() {
userIdThreadLocal.remove();
}
}
浙公网安备 33010602011771号