您可以保留您的简易处理程序并更改您需要的接受器类型。
(defpackage :web (:use :cl :hunchentoot))
(in-package :web)
;; This url can be accessed by all acceptors
(define-easy-handler (no-ssl :uri "/normal") ()
(setf (content-type*) "text/plain")
"NORMAL PAGE")
;; This url can be accessed only by an acceptor named SSL
(define-easy-handler (ssl :uri "/secure" :acceptor-names '(ssl)) ()
(setf (content-type*) "text/plain")
"SECURED PAGE")
对于测试,如果您还没有自签名证书,您可以执行以下操作:
$ cd /tmp
$ openssl req -new -x509 -nodes -out server.crt -keyout server.key
然后,我们定义了两种接受者:
(defvar *no-ssl-acceptor*
(make-instance 'easy-acceptor :port 8080))
(defvar *ssl-acceptor*
(make-instance 'easy-ssl-acceptor
:name 'ssl
:port 7777
:ssl-privatekey-file #P"/tmp/server.key"
:ssl-certificate-file #P"/tmp/server.crt"))
启动它们:
(start *ssl-acceptor*)
(start *no-ssl-acceptor*)
当您第一次尝试访问 HTTPS 页面时,您的浏览器应该会报错(忽略安全异常)。
另请注意,该:acceptor-names
参数是可选的(感谢@Simeon Ikudabo),在上面的示例中明确添加了该参数。您可以只定义一个 SSL 接受器,并让您的所有页面都通过安全链接提供服务。