middleware中check session
来源:3-17 api之http middleware的实现与handler收尾(上)
陈大洋
2019-03-23
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的做法
112019-03-24
相似问题