小编Rob*_*Rob的帖子

Go 服务器中基于角色的优雅 JWT 安全性

我正在编写一个 Go web API,它使用 JWT 进行令牌/身份验证等,我想知道是否有比以下更优雅的方式来提供对我的路由处理程序的不同级别的访问?

package main

import (
    "net/http"

    "github.com/gin-gonic/gin"
    jwt "gopkg.in/appleboy/gin-jwt.v2"
)

var (
    users = map[string]byte{
        "admin":    1,
        "manager":  2,
        "employee": 3,
    }
)

func main() {
    router := gin.Default()
    group := router.Group("/v1")

    jwtMiddleware := &jwt.GinJWTMiddleware{
        Realm:         "realm",
        Key:           []byte("password"),
        Authenticator: authenticate,
        PayloadFunc:   payload,
    }

    group.Use(jwtMiddleware.MiddlewareFunc())
    group.GET("/refreshToken", jwtMiddleware.RefreshHandler)
    group.GET("/hello", hello)

    router.POST("/login", jwtMiddleware.LoginHandler)
    router.Run(":1234")
}

func hello(c *gin.Context) {
    switch getRoleFromContext(c) {
    case 1:
        helloAdmin(c)
    case 2:
        helloManager(c)
    case 3:
        helloEmployee(c)
    default:
        c.AbortWithStatus(http.StatusForbidden)
    }
}

func helloAdmin(c …
Run Code Online (Sandbox Code Playgroud)

go jwt

7
推荐指数
1
解决办法
5351
查看次数

从log4net配置部分访问appSettings配置值

有谁知道是否可以从同一文件中的log4net config部分的配置文件的appSettings部分访问键/值(不使用代码)?

例如:

<appSettings>
    <add key="Environment" value="DEV" />
    <!-- etc -->
</appSettings>
<log4net>
    <appender name="RollingFile" type="log4net.Appender.RollingFileAppender">
    <file value="${APPDATA}\MyApp\${Environment}\MyApp.log" />
    <!-- etc -->
</log4net>
Run Code Online (Sandbox Code Playgroud)

似乎没有任何文档,所以我不希望...如果所有其他方法都失败,我将在文件值中添加“ DEV”,并将其与appSettings的Environment变量一起替换。

提前致谢,

log4net

6
推荐指数
2
解决办法
3595
查看次数

从 io.Reader 创建一个 io.ReaderAt

是否io.ReaderAt可以从 的实现中创建该实现而io.Reader无需先读入 a[]bytestring

interface go

5
推荐指数
2
解决办法
4272
查看次数

去地图vs C#字典

我写了一个快速而肮脏的测试来检查Go vs C#在并发查找访问方面的性能,并对结果感到惊讶.

这是一个非常简单的例子,我不是专家,但测试只是在地图上执行1,000,000次锁定/检查/添加/解锁操作,它只是单线程,因为我正在检查这些功能:

package main

import (
    "fmt"
    "sync"
    "time"
)

var mu sync.Mutex

func main() {
    cache := make(map[int]int, 1000000)
    start := time.Now()

    for i := 0; i < 1000000; i++ {
        mu.Lock()
        if _, ok := cache[i]; ok == false {
            cache[i] = i
        }
        mu.Unlock()
    }

    end := time.Since(start)
    fmt.Println(end)

    var sum int64
    for _, v := range cache {
        sum += int64(v)
    }

    fmt.Println(sum)
}
Run Code Online (Sandbox Code Playgroud)

在C#中也是如此(通过LINQPad):

void Main()
{
    var cache = new Dictionary<int, int>(1000000); …
Run Code Online (Sandbox Code Playgroud)

c# performance go

4
推荐指数
1
解决办法
4206
查看次数

RabbitMQ LDAP身份验证失败

我正在经历使用LDAP授权设置RabbitMQ的过程,但我没有太多运气......有人知道,请看看我告诉我我做错了什么?我能够使用以下代码查询LDAP以获取用户对象:

var entry = new DirectoryEntry("LDAP://ourldapbox.ourcompany.co.uk:636/CN=Mark Twain,OU=Development,OU=OurCompany Employees,DC=OurCompany,DC=co,DC=uk");
Run Code Online (Sandbox Code Playgroud)

配置尝试1

[
  {rabbit, [{auth_backends, [rabbit_auth_backend_ldap, rabbit_auth_backend_internal]}]},
  {rabbitmq_auth_backend_ldap,
   [ {servers,               ["ourldapbox.ourcompany.co.uk"]},
     {user_dn_pattern,       "CN=${username},OU=Development,OU=OurCompany Employees,DC=OurCompany,DC=co,DC=uk"},
     {use_ssl,               false},
     {port,                  636},
     {log,                   true}
   ]
  }
].
Run Code Online (Sandbox Code Playgroud)

配置尝试2

[
  {rabbit, [{auth_backends, [rabbit_auth_backend_ldap, rabbit_auth_backend_internal]}]},
  {rabbitmq_auth_backend_ldap,
   [ {servers,               ["ourldapbox.ourcompany.co.uk"]},
     {dn_lookup_attribute,   "sAMAccountName"},
     {dn_lookup_base,        "DC=ourcompany,DC=co,DC=uk"},
     {user_dn_pattern,       "${username}@ourcompany.co.uk"},
     {other_bind,            anon},
     {use_ssl,               false},
     {port,                  636},
     {log,                   true}
   ]
  }
].
Run Code Online (Sandbox Code Playgroud)

配置尝试3

[
  {rabbit, [{auth_backends, [rabbit_auth_backend_ldap, rabbit_auth_backend_internal]}]},
  {rabbitmq_auth_backend_ldap,
   [ {servers,               ["ourldapbox.ourcompany.co.uk"]},
     {dn_lookup_attribute,   "userPrincipalName"},
     {dn_lookup_base,        "dc=ourcompany,dc=co,dc=uk"},
     {user_dn_pattern,       "${username}@ourcompany.co.uk"},
     {use_ssl,               false},
     {port,                  636},
     {log,                   true}
   ] …
Run Code Online (Sandbox Code Playgroud)

ldap ldap-query rabbitmq easynetq

3
推荐指数
1
解决办法
3929
查看次数

标签 统计

go ×3

c# ×1

easynetq ×1

interface ×1

jwt ×1

ldap ×1

ldap-query ×1

log4net ×1

performance ×1

rabbitmq ×1