第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

將值傳遞給注入的 EJB

將值傳遞給注入的 EJB

青春有我 2022-09-07 17:09:04
我有一個 EJB 應(yīng)用程序,它由兩個 Bean(Web 層)和(業(yè)務(wù)層)組成,其中注入了 .ServiceEJBBusinessEJBBusinessEJBServiceEJBServiceEJB從瀏覽器接收 HTTP 請求,調(diào)用 中的方法,獲取結(jié)果,然后發(fā)送 HTTP 響應(yīng)。BusinessEJB此外,還有權(quán)訪問存儲登錄用戶的對象。無權(quán)訪問對象。ServiceEJBHttpSessionuserIdBusinessEJBHttpSession應(yīng)用程序需要記錄消息(例如,使用 sl4j/logback)。它可以在 or 中記錄消息,并且當(dāng)它記錄消息時,它必須在日志條目中包含會話。ServiceEJBBusinessEJBuserId由于 沒有 ,它需要從 中獲取它。問題是實(shí)現(xiàn)這一目標(biāo)的最佳方式是什么。我不想做的是將字段作為參數(shù)添加到 中的每個方法中,因?yàn)閼?yīng)用程序中有許多s和s(以及由其調(diào)用的其他bean也生成日志條目),并且我不想用該字段污染應(yīng)用程序。相反,我可以在EJB級別有一個字段,但是如何填充它們?有沒有辦法通過注釋來實(shí)現(xiàn)這一點(diǎn)?歡迎任何建議。BusinessEJBuserIdServiceEJBuserIdBusinessEJBServiceEJBBusinessEJBBusinessEJBuserIduserId@Produces({MediaType.APPLICATION_JSON})@Consumes({MediaType.APPLICATION_JSON})@Statelesspublic class ServiceEJB {    @Context    HttpServletRequest httpRequest;    @Inject    private BusinessEJB bean;    private String userId;    @Path("someurl")    public Response someMethod1() {       final HttpSession session = httpRequest.getSession();       // get the userId from the session       String s = bean.someMethod2();       // return Response    }}@Statelesspublic class BusinessEJB {  private String userId;  public String someMethod2() {     // ....  log an entry with userId     return "something";  }   }
查看完整描述

2 回答

?
DIEA

TA貢獻(xiàn)1820條經(jīng)驗(yàn) 獲得超3個贊

一些提示/評論:

  1. 如果與應(yīng)用程序服務(wù)器安全性集成,那么用戶名在任何組件上都可用。EJB 可以通過調(diào)用 的注入變體來獲得它,這里是:getCallerPrincipal()EJBContextjavax.ejb.SessionContext

    @Resource
    private SessionContext sessionCtx;

    Servlet 可以從 中檢索主體。JAX-RS 組件 () 可以從 中檢索它。HttpServletRequest.getUserPrincipal()ServiceEJBjavax.ws.rs.core.SecurityContext.getUserPrincipal()

    您有什么理由不與應(yīng)用程序服務(wù)器安全性集成嗎?

  2. 如果您有充分的理由不與應(yīng)用程序服務(wù)器安全性集成,我會提出解決方案與先前答案的變體。其變體是將應(yīng)用于所有資源(servlet 過濾器或 JAX-RS)的過濾器中的用戶數(shù)據(jù)設(shè)置為用戶數(shù)據(jù),這樣您就不必?fù)?dān)心在多個位置進(jìn)行設(shè)置。ContainerRequestFilter

  3. 如果您只需要用戶 ID 進(jìn)行日志記錄,我建議您看一下 slf4j 中映射診斷上下文 (MDC) 的概念。有了它,您可以在請求開始時盡早設(shè)置用戶 ID,然后使其可用于所有日志記錄語句。


查看完整回答
反對 回復(fù) 2022-09-07
?
天涯盡頭無女友

TA貢獻(xiàn)1831條經(jīng)驗(yàn) 獲得超9個贊

創(chuàng)建一個請求范圍的 CDI Bean,即 .UserContext

將其注入到兩個 EJB 中。

在設(shè)置用戶的ID和讀取它。ServiceEJBBusinessEJB


查看完整回答
反對 回復(fù) 2022-09-07
  • 2 回答
  • 0 關(guān)注
  • 88 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號