diff --git a/jap-ids/src/main/java/com/fujieid/jap/ids/JapIds.java b/jap-ids/src/main/java/com/fujieid/jap/ids/JapIds.java index 2ae183c31f0b20113894061db278bf204d0f546c..7e732665779f0de75d36e8870137f1d369eee339 100644 --- a/jap-ids/src/main/java/com/fujieid/jap/ids/JapIds.java +++ b/jap-ids/src/main/java/com/fujieid/jap/ids/JapIds.java @@ -15,11 +15,17 @@ */ package com.fujieid.jap.ids; +import com.fujieid.jap.core.spi.JapServiceLoader; import com.fujieid.jap.ids.config.IdsConfig; import com.fujieid.jap.ids.context.IdsContext; import com.fujieid.jap.ids.exception.IdsException; -import com.fujieid.jap.ids.model.IdsConsts; import com.fujieid.jap.ids.model.UserInfo; +import com.fujieid.jap.ids.pipeline.IdsFilterPipeline; +import com.fujieid.jap.ids.pipeline.IdsSignInPipeline; +import com.fujieid.jap.ids.service.IdsClientDetailService; +import com.fujieid.jap.ids.service.IdsIdentityService; +import com.fujieid.jap.ids.service.IdsUserService; +import com.fujieid.jap.ids.service.IdsUserStoreService; import javax.servlet.http.HttpServletRequest; import java.io.Serializable; @@ -32,18 +38,50 @@ import java.io.Serializable; * @since 1.0.0 */ public class JapIds implements Serializable { + private static final String UNREGISTERED_IDS_CONTEXT = "Unregistered ids context.Please use `JapIds.registerContext(IdsContext)` to register ids context."; private static IdsContext context; private JapIds() { } public static void registerContext(IdsContext idsContext) { + if (null == context) { + throw new IdsException(UNREGISTERED_IDS_CONTEXT); + } context = idsContext; + + loadService(); + + loadPipeline(); + } + + private static void loadService() { + if (null == context.getClientDetailService()) { + context.setClientDetailService(JapServiceLoader.loadFirst(IdsClientDetailService.class)); + } + if (null == context.getIdentityService()) { + context.setIdentityService(JapServiceLoader.loadFirst(IdsIdentityService.class)); + } + if (null == context.getUserService()) { + context.setUserService(JapServiceLoader.loadFirst(IdsUserService.class)); + } + if (null == context.getUserStoreService()) { + context.setUserStoreService(JapServiceLoader.loadFirst(IdsUserStoreService.class)); + } + } + + private static void loadPipeline() { + if (null == context.getFilterPipeline()) { + context.setFilterPipeline(JapServiceLoader.loadFirst(IdsFilterPipeline.class)); + } + if (null == context.getSigninPipeline()) { + context.setSigninPipeline(JapServiceLoader.loadFirst(IdsSignInPipeline.class)); + } } public static IdsContext getContext() { if (null == context) { - throw new IdsException("Unregistered ids context.Please use `JapIds.registerContext(IdsContext)` to register ids context."); + throw new IdsException(UNREGISTERED_IDS_CONTEXT); } return context; } @@ -53,15 +91,18 @@ public class JapIds implements Serializable { } public static void saveUserInfo(UserInfo userInfo, HttpServletRequest request) { - request.getSession().setAttribute(IdsConsts.OAUTH_USERINFO_CACHE_KEY, userInfo); + IdsContext context = getContext(); + context.getUserStoreService().save(userInfo, request); } public static UserInfo getUserInfo(HttpServletRequest request) { - return (UserInfo) request.getSession().getAttribute(IdsConsts.OAUTH_USERINFO_CACHE_KEY); + IdsContext context = getContext(); + return context.getUserStoreService().get(request); } public static void removeUserInfo(HttpServletRequest request) { - request.getSession().removeAttribute(IdsConsts.OAUTH_USERINFO_CACHE_KEY); + IdsContext context = getContext(); + context.getUserStoreService().remove(request); } public static IdsConfig getIdsConfig() { diff --git a/jap-ids/src/main/java/com/fujieid/jap/ids/service/IdsUserStoreService.java b/jap-ids/src/main/java/com/fujieid/jap/ids/service/IdsUserStoreService.java new file mode 100644 index 0000000000000000000000000000000000000000..e72213e436668257d2eec9c94a8c81e46191a132 --- /dev/null +++ b/jap-ids/src/main/java/com/fujieid/jap/ids/service/IdsUserStoreService.java @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2020-2040, 北京符节科技有限公司 (support@fujieid.com & https://www.fujieid.com). + *

+ * Licensed under the GNU LESSER GENERAL PUBLIC LICENSE 3.0; + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + *

+ * http://www.gnu.org/licenses/lgpl.html + *

+ * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.fujieid.jap.ids.service; + +import com.fujieid.jap.ids.model.IdsConsts; +import com.fujieid.jap.ids.model.UserInfo; + +import javax.servlet.http.HttpServletRequest; + +/** + * When the user logs in, store and operate the user's login information + * + * @author yadong.zhang (yadong.zhang0415(a)gmail.com) + * @version 1.0.0 + * @since 1.0.2 + */ +public interface IdsUserStoreService { + + /** + * Save user data, and store user information in {@link javax.servlet.http.HttpSession} by default. + *

+ * Developers can implement this method to save user information in other media, such as cache, database, etc. + * + * @param userInfo User information after login + * @param request current HTTP request + */ + default void save(UserInfo userInfo, HttpServletRequest request) { + request.getSession().setAttribute(IdsConsts.OAUTH_USERINFO_CACHE_KEY, userInfo); + } + + /** + * Get logged-in user information + * + * @param request current HTTP request + * @return UserInfo + */ + default UserInfo get(HttpServletRequest request) { + return (UserInfo) request.getSession().getAttribute(IdsConsts.OAUTH_USERINFO_CACHE_KEY); + } + + /** + * Delete logged-in user information + * + * @param request current HTTP request + */ + default void remove(HttpServletRequest request) { + request.getSession().removeAttribute(IdsConsts.OAUTH_USERINFO_CACHE_KEY); + } +}