使用Undertow适配器合并Keycloak身份验证时出错

问题描述 投票:0回答:1

我正在通过以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,作为示例。我从此(...

clojure keycloak undertow reitit buddy-auth
1个回答
0
投票
© www.soinside.com 2019 - 2024. All rights reserved.