123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- package outServer
- import (
- "bp.jydev.jianyu360.cn/BaseService/gateway/core/router"
- "bytes"
- "fmt"
- "github.com/gogf/gf/v2/net/ghttp"
- "github.com/gogf/gf/v2/util/gconv"
- "golang.org/x/net/publicsuffix"
- "io"
- "io/ioutil"
- "net/http"
- "net/http/cookiejar"
- "net/url"
- )
- type sussBi struct {
- addr string
- user string
- pwd string
- Url *url.URL
- jar *cookiejar.Jar
- }
- func InitSussBi(address, user, password string) *sussBi {
- sussCookie, _ := cookiejar.New(&cookiejar.Options{
- PublicSuffixList: publicsuffix.List,
- })
- u, _ := url.Parse(address)
- return &sussBi{
- addr: address,
- user: user,
- Url: u,
- pwd: password,
- jar: sussCookie,
- }
- }
- // AutoLogin 自动登录
- func (s *sussBi) AutoLogin() error {
- client := &http.Client{
- Jar: s.jar,
- }
- resp, err := client.Get(fmt.Sprintf("%s/?:user=%s&:password=%s", s.addr, s.user, s.pwd))
- if err != nil {
- return err
- }
- if !(resp.StatusCode == 302 || resp.StatusCode == 200) {
- return fmt.Errorf("自动登录异常")
- }
- return nil
- }
- // RequestLogin 装配登录状态
- func (s *sussBi) RequestLogin(r *ghttp.Request) error {
- if cookies := s.jar.Cookies(s.Url); len(cookies) > 0 {
- r.Request.AddCookie(cookies[0])
- }
- return nil
- }
- // CheckLoginOut 检测登录状态是否过期
- func (s *sussBi) CheckLoginOut(r *ghttp.Request) bool {
- if r.Response.Status == 401 {
- return true
- }
- return false
- }
- func (s *sussBi) Filter(r *ghttp.Request) error {
- ctx := router.GetGContext(r.GetCtx())
- if ctx.Sess.NewUid != 0 && r.Request.Method == http.MethodPost {
- bodyBytes, err := io.ReadAll(r.Request.Body)
- if err != nil {
- return err
- }
- if len(bodyBytes) > 0 {
- finalBytes := bytes.ReplaceAll(bodyBytes, []byte(`"jyUserId"`), []byte(fmt.Sprintf(`"%d"`, ctx.Sess.NewUid)))
- r.ContentLength = gconv.Int64(len(finalBytes))
- r.Request.Header.Set("Content-Length", fmt.Sprintf("%d", len(finalBytes)))
- //fmt.Printf("before len:%d value:%s\nafter: len:%d value:%s\n", len(bodyBytes), string(bodyBytes), len(finalBytes), string(finalBytes))
- //fmt.Printf("header %+v\n", r.Request.Header)
- r.Request.Body = ioutil.NopCloser(bytes.NewReader(finalBytes))
- }
- }
- return nil
- }
|