Создайте оболочку вокруг каждого обработчика для передачи запроса от промежуточного программного обеспечения для аутентификации, которое будет пересылать запрос дальше после выполнения аутентификации, иначе верните ответ с ошибкой как
func authentication(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
log.Println("Executing authentication")
next.ServeHTTP(w, r)
})
}
// open the dialog to download pdf files.
func dowloadPdf(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Disposition", "attachment; filename=YOUR_FILE")
w.Header().Set("Content-Type", r.Header.Get("Content-Type"))
w.Write([]byte("File downloaded"))
}
func main(){
pdfHandler := http.HandlerFunc(dowloadPdf)
http.Handle("/servepdf", authentication(pdfHandler))
http.ListenAndServe(":3000", nil)
}
Но если я учту факт тамнет необходимости иметь аутентификацию при обслуживании статических файлов, таких как html, css, js и т. д. Было бы лучше создать обработчик для обслуживания pdf-файлов после аутентификации пользователей.
Вы также можете использовать negorni промежуточное программное обеспечение с гориллой Mux, а не создание пользовательских промежуточных программ.