jgr*_*ran 7 fileserver go basic-authentication
我无法使用go-http-auth对http.FileServer进行基本身份验证.
package main
import (
"fmt"
"log"
"net/http"
"github.com/abbot/go-http-auth"
)
func Secret(user, realm string) string {
users := map[string]string{
"john": "$1$dlPL2MqE$oQmn16q49SqdmhenQuNgs1", //hello
}
if a, ok := users[user]; ok {
return a
}
return ""
}
func doRoot(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "<h1>static file server</h1><p><a href='./static'>folder</p>")
}
func handleFileServer(w http.ResponseWriter, r *http.Request) {
fs := http.FileServer(http.Dir("static"))
http.StripPrefix("/static/", fs)
}
func main() {
authenticator := auth.NewBasicAuthenticator("localhost", Secret)
// how to secure the FileServer with basic authentication??
// fs := http.FileServer(http.Dir("static"))
// http.Handle("/static/", http.StripPrefix("/static/", fs))
http.HandleFunc("/static/", auth.JustCheck(authenticator, handleFileServer))
http.HandleFunc("/", auth.JustCheck(authenticator, doRoot))
log.Println(`Listening... http://localhost:3000
folder is ./static
authentication in map users`)
http.ListenAndServe(":3001", nil)
}
Run Code Online (Sandbox Code Playgroud)
代码
fs := http.FileServer(http.Dir("static"))
http.Handle("/static/", http.StripPrefix("/static/", fs))
Run Code Online (Sandbox Code Playgroud)
在main()中无需身份验证,但不能与auth.JustCheck一起使用.我尝试使用handleFileServer函数,但没有显示任何内容.有什么诀窍?
谢谢,jgr
One*_*One 10
您需要返回StripPrefix的ServeHTTP方法,例如:
func handleFileServer(dir, prefix string) http.HandlerFunc {
fs := http.FileServer(http.Dir(dir))
realHandler := http.StripPrefix(prefix, fs).ServeHTTP
return func(w http.ResponseWriter, req *http.Request) {
log.Println(req.URL)
realHandler(w, req)
}
}
func main()
//....
http.HandleFunc("/static/", auth.JustCheck(authenticator, handleFileServer("/tmp", "/static/")))
//....
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4248 次 |
| 最近记录: |