我有两个应用程序,在第一个应用程序中说用户通过用户名和密码登录。我通过在应用程序 A 中使用 spring 身份验证对象登录用户名。应用程序 A 正在对应用程序 B 进行 rest 或 soap api 调用。我通过在 rest 或 soap 调用的标头中添加用户名将用户名从 A 传递到 B 应用程序。应用程序 B 正在调用数据库,在 SQL 数据库上执行 CRUD。我想将该用户名保存在更新者、修改者字段中。我使用 bean 来存储用户名,但是当多个用户使用应用程序时,它会被覆盖。如何实现?谢谢
在下面的拦截器中,userSync 将保存我当前登录的用户名,usernameGetter 将用于从 http 请求中获取当前登录的用户名。userSync 和 usernameGetter 是单例 bean。
public class RequestInterceptor extends HandlerInterceptorAdapter {
private DomainUserSynchronizer userSynchronizer;
@Autowired
UsernameGetter usernameGetter;
@Autowired
private UserSynchronizer userSync;
private static final Logger LOGGER = LoggerFactory.getLogger(RequestInterceptor.class);
@Override
public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)
throws Exception {
LOGGER.info("Inside after completion");
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView)
throws Exception {
// do nothing
}
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
HttpSession session = request.getSession();
// Enumeration e = (Enumeration) (session.getAttributeNames());
//session.getAttribute("an");
//session.getAttribute("MYSPEAK_SESSION_HASH");
String username = usernameGetter.getUsernameFromSession(request);
if(username!=null && !username.isEmpty()){
LOGGER.info("Found username in request: "+ username);
LOGGER.info("Setting username in userSynchronizer: "+ username);
userSync.getCurrentUser().setName(username);
}
else{
LOGGER.info(" Username not found in request: ");
LOGGER.info("Setting default username in userSynchronizer: "+ userSync.getCurrentUser().getName());
}
return true;
}
斯蒂芬大帝
相关分类