浏览代码

fix:修复beego使用file储存session时存在的路径BUG

lifei6671 7 年之前
父节点
当前提交
7785fb270d
共有 4 个文件被更改,包括 44 次插入2 次删除
  1. 1 1
      Gopkg.toml
  2. 31 1
      commands/command.go
  3. 3 0
      commands/daemon/daemon.go
  4. 9 0
      routers/filter.go

+ 1 - 1
Gopkg.toml

@@ -31,7 +31,7 @@
 
 [[constraint]]
   name = "github.com/astaxie/beego"
-  version = "1.10.0"
+  version = "1.10.1"
 
 [[constraint]]
   name = "github.com/boombuler/barcode"

+ 31 - 1
commands/command.go

@@ -12,7 +12,6 @@ import (
 	"time"
 
 	"encoding/json"
-
 	"github.com/astaxie/beego"
 	beegoCache "github.com/astaxie/beego/cache"
 	_ "github.com/astaxie/beego/cache/memcache"
@@ -26,6 +25,8 @@ import (
 	"github.com/lifei6671/mindoc/utils/filetil"
 	"github.com/astaxie/beego/cache/redis"
 	"github.com/howeyc/fsnotify"
+	"net/http"
+	"bytes"
 )
 
 // RegisterDataBase 注册数据库
@@ -448,6 +449,35 @@ func RegisterAutoLoadConfig() {
 		}
 	}
 }
+//注册错误处理方法.
+func RegisterError()  {
+	beego.ErrorHandler("404", func(writer http.ResponseWriter, request *http.Request) {
+		var buf bytes.Buffer
+
+		data :=make(map[string]interface{})
+		data["ErrorCode"] = 404
+		data["ErrorMessage"] = "页面未找到或已删除"
+
+		if err := beego.ExecuteViewPathTemplate(&buf,"errors/error.tpl",beego.BConfig.WebConfig.ViewsPath,data);err == nil {
+			fmt.Fprint(writer,buf.String())
+		} else {
+			fmt.Fprint(writer,data["ErrorMessage"])
+		}
+	})
+	beego.ErrorHandler("401", func(writer http.ResponseWriter, request *http.Request) {
+		var buf bytes.Buffer
+
+		data :=make(map[string]interface{})
+		data["ErrorCode"] = 401
+		data["ErrorMessage"] = "请与 Web 服务器的管理员联系,以确认您是否具有访问所请求资源的权限。"
+
+		if err := beego.ExecuteViewPathTemplate(&buf,"errors/error.tpl",beego.BConfig.WebConfig.ViewsPath,data);err == nil {
+			fmt.Fprint(writer,buf.String())
+		} else {
+			fmt.Fprint(writer,data["ErrorMessage"])
+		}
+	})
+}
 
 func init() {
 

+ 3 - 0
commands/daemon/daemon.go

@@ -44,12 +44,15 @@ func (d *Daemon) Start(s service.Service) error {
 
 func (d *Daemon) Run() {
 
+
 	commands.ResolveCommand(d.config.Arguments)
 
 	commands.RegisterFunction()
 
 	commands.RegisterAutoLoadConfig()
 
+	commands.RegisterError()
+
 	beego.ErrorController(&controllers.ErrorController{})
 
 	f,err := filepath.Abs(os.Args[0])

+ 9 - 0
routers/filter.go

@@ -7,6 +7,7 @@ import (
 	"github.com/lifei6671/mindoc/conf"
 	"github.com/lifei6671/mindoc/models"
 	"net/url"
+	"regexp"
 )
 
 func init() {
@@ -42,5 +43,13 @@ func init() {
 		ctx.ResponseWriter.Header().Add("MinDoc-Site", "https://www.iminho.me")
 	}
 
+	var StartRouter = func(ctx *context.Context) {
+		sessionId := ctx.Input.Cookie(beego.AppConfig.String("sessionname"))
+		//sessionId必须是数字字母组成,且最小32个字符,最大1024字符
+		if ok, err := regexp.MatchString(`^[a-zA-z0-9]{32,1024}$`, sessionId); !ok || err != nil {
+			panic("401")
+		}
+	}
+	beego.InsertFilter("/*", beego.BeforeStatic, StartRouter, false)
 	beego.InsertFilter("/*", beego.BeforeRouter, FinishRouter, false)
 }