请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

middleware中check session

func (m middleWareHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
	//check session
	validateUserSession(r)

	m.r.ServeHTTP(w, r)
}

这个方法validateUserSession返回布尔值,我理解应该这样:

ok:=validateUserSession(r); if ok == true{
    m.r.ServeHTTP(w, r)
}else{
	sendErrorMsg()  // 返回401错误
}

请问老师我的想法合理吗?

正在回答

1回答

是这样的

validateUserSession(r)

实际上做了两件事情,一个是返回session是否valid,一个是如果validate结果是true,则会把相应session的username带上去,那么在进入每一个handler的时候都会放行

具体放行的地方可以参考每一个handler的第一行,会判断如下

if !ValidateUser(w, r) {
		return
	}

而你说的返回401错误的部分已经在ValidateUser里面写过了。


其实这里是可以完全把validate的部分抽出来做成一个interface的,但是由于我们这个实战里面没有特别复杂的鉴权与参数校验等请求处理前的检查,因此没有这么做,只是简单的用了一个ValidateUser做了一下。

完整并且对大型项目来说,通用的部分应该用interface来抽象,并且在interface里面添加如下的步骤:

type RequestFlow interface {
    ValidateSession()
    ValidateUser()
    ValidateRequests()
    RequestHandler()
    ResponseBuilder()
    SendResponse()
}

然后用一个统一的通用流程将上述步骤串联起来,构成通用的request处理flow,这也是比较gopher的做法

1 回复 有任何疑惑可以回复我~
  • 提问者 陈大洋 #1
    非常感谢!
    回复 有任何疑惑可以回复我~ 2019-03-24 13:17:04
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号