Clojure,Servlet和JWT

时间:2012-08-20 19:52:34

标签: servlets clojure jetty jwt

编辑:对于工作样本,请查看this demo project

免责声明:我在构建java Web应用程序时是总noob

我正在尝试将JWT与Clojure一起使用,但我根本不知道如何处理这个“servlet”的事情。到目前为止,我的想法是:

  1. 使用“Hello World”表单创建WApplication

    (defn make-hello-app [env]
      (let [wapp (WApplication. env)
            root (.getRoot wapp)]
        (.setTitle wapp "Hello world")
        (.addWidget root (WText. "Hello!!!!"))
        wapp))
    
  2. 创建一个继承自WtServlet

    的servlet
    (def servlet
      (proxy [WtServlet] []
        (createApplication [env]
          (make-hello-app env))))
    
  3. 启动jetty并使用servlet。这是我不知道该怎么办。到目前为止,这是我最好的镜头:

    (ns jwttest.core
      (:use compojure.core)
      (:use ring.adapter.jetty)
      (:import (org.eclipse.jetty.server Server))
      (:import (eu.webtoolkit.jwt WApplication WEnvironment WtServlet WText WPushButton WLineEdit WBreak)))
    
    ;; (the funcions above were defined here)
    
    ;; create a jetty server
    (defn create-a-jetty-server []
      (let [connector (doto (SelectChannelConnector.)
                            (.setPort 8080)
                            (.setHost "localhost"))
         server (doto (Server.)
                      (.addConnector connector)
                      (.setSendDateHeader true))]
         server))
    
     ;; start the application
     (defn start-the-app []
       (let [server (create-a-jetty-server)]
          ;; ???? .addServlet ? How?
          (.start server)))
    
  4. project.clj我有:

    [org.clojure/clojure "1.4.0"]
    [eu.webtoolkit/jwt "3.2.0"]
    [compojure "1.1.1"]
    [ring "1.1.2"]
    

    我知道ring可以从处理程序创建一个servlet,但是在这种情况下我已经有了一个servlet所以...我应该怎么做才能运行它?

    注意:我的代码基于此very old post made in 2009

1 个答案:

答案 0 :(得分:4)

我挖掘了一些Jetty APIRing / Noir码头处理代码,这里是我发现的内容摘要(并且没有机会进行测试)< / p>

  • Jetty Server有一个“setHandler”方法,它接受一个处理程序(感谢Ring)
  • 有一个ServletHandler类,看起来很适合上面的类,它有许多类似于addServlet的方法,看起来就像你需要它们一样。

您应该能够将处理程序设置为Servlet处理程序并从那里开始。