代码拉取完成,页面将自动刷新
package strategy
import (
"gitee.com/tylf2018/go-micro-framework/pkg/code"
"gitee.com/tylf2018/go-micro-framework/pkg/common/core"
"gitee.com/tylf2018/go-micro-framework/pkg/errors"
"gitee.com/tylf2018/go-micro-framework/server/restserver/middlewares/auth"
"strings"
"github.com/gin-gonic/gin"
)
const authHeaderCount = 2
// AutoStrategy defines authentication strategy which can automatically choose between Basic and Bearer
// according `Authorization` header.
type AutoStrategy struct {
basic *BasicStrategy
jwt *JWTStrategy
}
// NewAutoStrategy create auto strategy with basic strategy and jwt strategy.
// NewAutoStrategy 使用 basic策略 和 jwt策略 创建自动策略
func NewAutoStrategy(basic *BasicStrategy, jwt *JWTStrategy) AutoStrategy {
return AutoStrategy{
basic: basic,
jwt: jwt,
}
}
// AuthFunc defines auto strategy as the gin authentication middleware.
func (a AutoStrategy) AuthFunc() gin.HandlerFunc {
return func(c *gin.Context) {
operator := auth.AuthOperator{}
authHeader := strings.SplitN(c.Request.Header.Get("Authorization"), " ", 2)
if len(authHeader) != authHeaderCount {
core.WriteResponse(
c,
errors.WithCode(code.ErrInvalidAuthHeader.Code(), "Authorization header format is wrong."),
nil,
)
c.Abort()
return
}
switch authHeader[0] {
case "Basic":
operator.SetStrategy(a.basic)
case "Bearer":
operator.SetStrategy(a.jwt)
// a.JWT.MiddlewareFunc()(c)
default:
core.WriteResponse(c, errors.WithCode(code.ErrSignatureInvalid.Code(), "unrecognized Authorization header."), nil)
c.Abort()
return
}
operator.AuthFunc()(c)
c.Next()
}
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。