亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 Java Spring 4 中執行從應用程序 A 到應用程序 B 的 rest

在 Java Spring 4 中執行從應用程序 A 到應用程序 B 的 rest

守候你守候我 2022-12-15 16:37:58
我有兩個應用程序,在第一個應用程序中說用戶通過用戶名和密碼登錄。我通過在應用程序 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;@AutowiredUsernameGetter usernameGetter;@Autowiredprivate UserSynchronizer userSync;private static final Logger LOGGER = LoggerFactory.getLogger(RequestInterceptor.class);@Overridepublic void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)        throws Exception {    LOGGER.info("Inside after completion");}@Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView)        throws Exception {    // do nothing}@Overridepublic 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;}
查看完整描述

1 回答

?
斯蒂芬大帝

TA貢獻1827條經驗 獲得超8個贊

我猜你的問題在你通過 Spring 聲明的 bean 的范圍內:https ://docs.spring.io/spring/docs/3.0.0.M3/reference/html/ch04s04.html

我建議您檢查所有調用是否都經過最大級別的請求范圍。

解決您的問題的另一點是通過休息/肥皂確認/回滾每次呼叫的交易。您可能會在不提交的情況下覆蓋數據庫的實體。

為了避免更新中的覆蓋,我建議添加一個日志記錄表,您可以在其中跟蹤所有修改,并且您只能對其進行插入(不可變/審計行)


查看完整回答
反對 回復 2022-12-15
  • 1 回答
  • 0 關注
  • 95 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號