如何解决如何实现过滤器每个会话只执行一次用户更新?
环境:
- Jboss 7.2
- Java 11
- 休眠 5+
我有一个过滤器,每次用户登录时,我都会更新访问时间和子表(User -> UserRol)中的任何角色更改。
我遇到的问题是函数 userSvc.trace() 在每个会话中执行不止一次,并且会引发 OptimisticLockingExcpetion。
是否可以在过滤器中每个会话只执行一次用户更新?
并行任务
10:54:33,091 INFO [stdout] (default task-2) -----------> session_id:Xwoejqbh1qII8g_dy4jAu4Xt4umYfQc0NpIt56gs
10:54:34,267 INFO [stdout] (default task-3) ----------->session_id:Xwoejqbh1qII8g_dy4jAu4Xt4umYfQc0NpIt56gs
10:54:34,269 INFO [stdout] (default task-1) ----------->session_id:Xwoejqbh1qII8g_dy4jAu4Xt4umYfQc0NpIt56gs
过滤
@Override
public void doFilter(ServletRequest req,ServletResponse resp,FilterChain chain) throws java.io.IOException {
req.setCharacterEncoding(UTF8);
resp.setCharacterEncoding(UTF8);
HttpServletRequest sReq = (HttpServletRequest) req;
HttpSession session = sReq.getSession(false);
boolean isLoggedIn = (session != null && session.getAttribute(USER) != null);
try {
if (!isLoggedIn) {
User user = usuariSvc.trace(uPrincipal); //uPrincipal loaded with req data
sReq.getSession().setAttribute(USER,user);
} else {
chain.doFilter(req,resp);
}
} catch (Exception e) {
log.error("Error doFilter " + e.getMessage(),e);
}
}
用户服务
@Stateless
public class UserService {
...
public User trace(UserPrincipal uPrincipal) throws AppException {
...
updateRols(usuari,uPrincipal);
em.flush();
...
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。