我正在编写一个 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) 有谁知道是否可以从同一文件中的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变量一起替换。
提前致谢,
抢
是否io.ReaderAt可以从 的实现中创建该实现而io.Reader无需先读入 a[]byte或string?
我写了一个快速而肮脏的测试来检查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) 我正在经历使用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) go ×3
c# ×1
easynetq ×1
interface ×1
jwt ×1
ldap ×1
ldap-query ×1
log4net ×1
performance ×1
rabbitmq ×1