[英]How to work with Liferay internal code in portlets?
之前我問了一個關於如何訪問由 liferays 內部 OIDC 流程設置的會話數據的問題。 最后,我使用 java 反射訪問了令牌,但我無法相信這是正確的或唯一的方法。
我添加了以下依賴項,希望我能夠直接使用 OpenIdConnectSessionImpl 但這樣我無法將 portlet 添加到我的 liferay。
compileOnly 'com.liferay:com.liferay.portal.security.sso.openid.connect.impl'
compileOnly group: 'com.nimbusds', name: 'oauth2-oidc-sdk', version: '5.17.1'
這是我使用的代碼:
Object oidcSession = httpSession.getAttribute("OPEN_ID_CONNECT_SESSION");
if (oidcSession instanceof OpenIdConnectSessionImpl) {
OpenIdConnectSessionImpl openIdConnectSessionImpl = (OpenIdConnectSessionImpl) oidcSession;
LOG.info(openIdConnectSessionImpl.getUserInfo().toJSONObject().toString(new JSONStyle(4)));
} else {
LOG.info("What is this.");
}
使用反射從oidcSession
獲取令牌有效但不使用實際類。
Liferay 通過 OSGi 實現模塊化的美妙之處在於,您可以訪問為您的訪問而設計的所有內容(例如導出),而沒有明確未導出的內容。 以Impl
結尾的類通常屬於非導出類。
您仍然可以創建訪問權限,但您會明確地知道您正在超越已發布的 API,並且您讓自己依賴於實現。 猜猜誰也在改變實施,而不照顧其他人? 上游項目。 Liferay 的開發人員正在努力保持 API 的穩定,但改變他們的實現是他們的職責。
如果您決定需要訪問實現:不客氣,打開這些模塊。 請注意,未來的每一次(次要)升級都可能會改變您所依賴的實現的一個方面。 您願意為未來接受高維護負擔。 對於某些功能,這很好,您可能願意為此付出代價。 其他功能可能無法證明這個價格是合理的。 做出明智的選擇。
這個問題沒有通用的答案,只有一堆經驗法則:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.