我正在通过以Keycloak为例,在我的应用程序中将org.keycloak/keycloak-undertow-adapter
用于SSO,并使用immutant-keycloak。
我从中更改了中间件功能(没有SSO,但是像魅力一样工作,],>
(defn wrap-auth [handler] (let [backend (backends/session {:unauthorized-handler handle-unauthorized})] (.registerSessionListener session-manager session-management) (-> handler (wrap-authentication backend) (wrap-authorization backend) (wrap-access-rules {:rules [{:pattern #"^/favicon.ico$" :handler permit-all} {:pattern #"^/assets/.*" :handler permit-all} {:pattern #"^/css/.*" :handler permit-all} {:pattern #"^/js/.*" :handler permit-all} {:pattern #"^/auth/.*" :handler permit-all} {:pattern #"^/.*" :handler authenticated-access}] :on-error on-error}))))
对此,
(defn wrap-auth [handler] (let [backend (backends/session {:unauthorized-handler handle-unauthorized}) session-manager (InMemorySessionManager. "SESSION_MANAGER") deployment (KeycloakDeploymentBuilder/build (io/input-stream (io/resource "keycloak.json"))) deployment-context (AdapterDeploymentContext. deployment) session-management (UndertowUserSessionManagement.) nodes-management (NodesRegistrationManagement.) auth-mechanisms [(CachedAuthenticatedSessionMechanism.) (UndertowAuthenticationMechanism. deployment-context session-management nodes-management -1 nil)] ] (.registerSessionListener session-manager session-management) (-> (undertow/create-http-handler handler) (AuthenticationCallHandler.) (AuthenticationMechanismsHandler. auth-mechanisms) (->> (UndertowAuthenticatedActionsHandler. deployment-context) (UndertowPreAuthActionsHandler. deployment-context session-management session-manager) (SecurityInitialHandler. AuthenticationMode/PRO_ACTIVE idm)) (wrap-authentication handler backend) (wrap-authorization backend) (wrap-access-rules {:rules [{:pattern #"^/favicon.ico$" :handler permit-all} {:pattern #"^/assets/.*" :handler permit-all} {:pattern #"^/css/.*" :handler permit-all} {:pattern #"^/js/.*" :handler permit-all} {:pattern #"^/auth/.*" :handler permit-all} {:pattern #"^/.*" :handler authenticated-access}] :on-error on-error}))))
...而且我像这样使用
wrap-auth
,
(defn wrap-base [handler] (-> ((:middleware defaults) handler) (wrap-defaults (-> site-defaults (assoc-in [:security :anti-forgery] false) (assoc-in [:session :store] (ttl-memory-store (* 60 30))))) wrap-flash wrap-session wrap-auth wrap-internal-error))
现在,我遇到此错误,
2020-03-06 15:13:29,555 [XNIO-1 task-3] ERROR asaas.middleware - io.undertow.security.handlers.SecurityInitialHandler cannot be cast to clojure.lang.IFn java.lang.ClassCastException: io.undertow.security.handlers.SecurityInitialHandler cannot be cast to clojure.lang.IFn at buddy.auth.middleware$wrap_authentication$fn__13043.invoke(middleware.clj:60) at buddy.auth.middleware$wrap_authorization$fn__13050.invoke(middleware.clj:114) at buddy.auth.accessrules$wrap_access_rules$fn__10778.invoke(accessrules.clj:354) at asaas.middleware$wrap_internal_error$fn__15087.invoke(middleware.clj:49) at immutant.web.internal.undertow$create_http_handler$reify__15077.handleRequest(undertow.clj:239) at org.projectodd.wunderboss.web.undertow.async.websocket.UndertowWebsocket$2.handleRequest(UndertowWebsocket.java:109) at io.undertow.server.session.SessionAttachmentHandler.handleRequest(SessionAttachmentHandler.java:68) at io.undertow.server.Connectors.executeRootHandler(Connectors.java:211) at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:809) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:745)
任何帮助将不胜感激。
我正在尝试在我的应用程序中通过使用org.keycloak / keycloak-undertow-adapter使用org.keycloak / keycloak-undertow-adapter来使用Keycloak进行SSO,作为示例。我从此(...