我的set在ConcurrentMap中是否是线程安全的?(will my set be thread safe within a ConcurrentMap?)
我有以下代码。 即使集合本身不是线程安全的,它是否是线程安全的?
private ConcurrentMap<REGISTRY, Set<CONTACT_ROLES>> proxyRoles = new ConcurrentHashMap<REGISTRY, Set<CONTACT_ROLES>>(); public void setProxyRoles(ConcurrentMap<REGISTRY, Set<CONTACT_ROLES>> proxyRoles) { this.proxyRoles = proxyRoles; } public ConcurrentMap<REGISTRY, Set<CONTACT_ROLES>> getProxyRoles() { return proxyRoles; } public synchronized void addProxyRole(REGISTRY reg, CONTACT_ROLES role) { if(proxyRoles.get(reg) == null){ proxyRoles.put(reg, new HashSet<CONTACT_ROLES>()); } proxyRoles.get(reg).add(role); }
编辑:
经过一些非常好的答案,我明白我的解决方案不安全,我google了一下,找到了一个很好的替代ConcurrentSkipListSet中的集合
I have the following code. Will it be thread safe even if the set itself is not thread safe?
private ConcurrentMap<REGISTRY, Set<CONTACT_ROLES>> proxyRoles = new ConcurrentHashMap<REGISTRY, Set<CONTACT_ROLES>>(); public void setProxyRoles(ConcurrentMap<REGISTRY, Set<CONTACT_ROLES>> proxyRoles) { this.proxyRoles = proxyRoles; } public ConcurrentMap<REGISTRY, Set<CONTACT_ROLES>> getProxyRoles() { return proxyRoles; } public synchronized void addProxyRole(REGISTRY reg, CONTACT_ROLES role) { if(proxyRoles.get(reg) == null){ proxyRoles.put(reg, new HashSet<CONTACT_ROLES>()); } proxyRoles.get(reg).add(role); }
EDIT:
After some very good answers I understand that my solution would not be safe and I googled a bit and found a good replacement for my set in a ConcurrentSkipListSet
原文:https://stackoverflow.com/questions/9313382
更新时间:2023-10-11 10:10
最满意答案
尝试在一个链中添加身份验证服务
services .AddAuthentication(JwtBearerDefaults.AuthenticationScheme) .AddJwtBearer((options) => { options.Authority = $"..."; options.Audience = "..."; }) .AddBasicAuthentication(credentials => { Task.FromResult(credentials.username == "username" && credentials.password == "password")); }
您还可以在
AuthorizeAttribute
上指定要对请求进行身份验证的方案[Authorize(AuthenticationSchemes = BasicAuthenticationDefaults.AuthenticationScheme + ", " + JwtBearerDefaults.AuthenticationScheme)]
try Adding your authentication service in one chain
services .AddAuthentication(JwtBearerDefaults.AuthenticationScheme) .AddJwtBearer((options) => { options.Authority = $"..."; options.Audience = "..."; }) .AddBasicAuthentication(credentials => { Task.FromResult(credentials.username == "username" && credentials.password == "password")); }
and also on
AuthorizeAttribute
you can specify which Scheme you want to authenticate the request with[Authorize(AuthenticationSchemes = BasicAuthenticationDefaults.AuthenticationScheme + ", " + JwtBearerDefaults.AuthenticationScheme)]
相关问答
更多-
您可以实现处理基本身份验证的中间件。 public async Task Invoke(HttpContext context) { var authHeader = context.Request.Headers.Get("Authorization"); if (authHeader != null && authHeader.StartsWith("basic", StringComparison.OrdinalIgnoreCase)) { var token ...
-
我回答了这个问题:4年前如何使用HMAC 来保护ASP.NET Web API 。 现在,很多事情改变了安全性,尤其是JWT越来越受欢迎。 在这里,我将尝试解释如何以最简单和最基本的方式使用JWT,所以我们不会迷失OWIN,Oauth2,ASP.NET Identity ... :)的丛林。 如果你不知道JWT令牌,你需要看一点点: https://tools.ietf.org/html/rfc7519 基本上,JWT令牌如下所示:
. 将Web api身份验证从.NET Core 1.1迁移到2.0(Migrating web api authentication from .NET Core 1.1 to 2.0)[2021-10-11]
我遇到了同样的问题,直到我读到这个 。 当我们使用Authorize属性时,它实际上默认绑定到第一个身份验证系统。 解决方案是指定使用的方案(JwtBearer): [Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme, Policy = "PoliceName")] 现在我可以获得状态200(带有效令牌)和401(未经授权 - 无效令牌) I was facing the same problem, until ...如何在Web API Core 2中支持多种身份验证方案?(How to support multiple authentication scheme in Web API Core 2?)[2021-12-31]
尝试在一个链中添加身份验证服务 services .AddAuthentication(JwtBearerDefaults.AuthenticationScheme) .AddJwtBearer((options) => { options.Authority = $"..."; options.Audience = "..."; }) .AddBasicAuthentication(credentials => { Task.FromResult(credentials.usern ...我认为您甚至无法在ASP.NET Core Mvc 2.0编译代码,因为您有2个动作映射到相同的路由[HttGet] api/values : AmbiguousActionException: Multiple actions matched. 请记住, ASP.NET Web API使用HTTP谓词作为请求的一部分来计算要调用的操作。 虽然它使用传统路由(您将操作命名为Get,Post,Put和Delete等),但如果您没有指定路由属性,我强烈建议您始终使用路由属性来注释您的控制器和操作。 Api设计 ...对于遇到同样问题的任何人,这是由于在非Windows平台上配置kerberos的方式。 这与docker无关,而是作为一个基于linux的容器运行。 解决方案是将您的平台切换到Windows或在您的平台上正确配置Kerberos身份验证。 这在下面的github问题中有更详细的讨论: https://github.com/dotnet/wcf/issues/2641和https://github.com/dotnet/corefx/issues/9533 For anyone experiencing th ...请设置值 options.AutomaticChallenge = true 这应该解决身份验证处理程序错误。 https://social.msdn.microsoft.com/Forums/en-US/d0b65153-4313-449d-8fb8-a861c3cf8bf7/aspnet-core-1-authentication-cookie-not-being-set-in-google-chrome-作品-在-IE?论坛= csharpgeneral please set the value of ...如何在Web API 2(ASP.Net Core)中实现基本身份验证?(How to implement basic authentication in web API 2 (ASP.Net Core)?)[2021-12-07]
我不确定你为什么说ASP.Net Core和Web API 2.它们是相互排斥的; 我们通常不会在同一个项目中使用它们。 现在我的问题是,是否可以在Web API 2中实现基本身份验证? 如果可能的话,我可以通过动作过滤器实现它吗? 在Web API 2中进行身份验证的最佳方法是什么? 我应该使用中间件吗? 在Web API 2中,您可以使用DelegatingHandler轻松实现基本身份验证。 这是示例代码 - IBasicSecurityService public interface IBasicS ....NET ASP Core中的网站和Web服务上的用户身份验证(User authentication on website and web service in .NET ASP Core)[2023-12-06]
OpenID Connect或OAuth很有意义,因为您已拥有的所有声明/角色都将封装到令牌中。 我目前使用IdentityServer4,它适用于您的确切情况。 由于您已经在使用Identity数据库实现,因此只要您有后端即可。 最后,对网站的调用直到http为止,所有文档都记录完备。 http://www.identityserver.io OpenID Connect or OAuth makes sense because all of the claims/roles you already ha ...如何在net core web api中覆盖OnAuthorization?(How do I override OnAuthorization in net core web api?)[2022-02-16]
您可以使用自定义中间件作为MVC过滤器来完成此任务。 这是在ASP.NET Core 1.1中公布的(请参阅有关中间件的部分作为MVC过滤器)。 以下是基于您的示例的一些示例代码: 首先,创建自定义中间件来完成工作: public class MyCustomAuthenticationMiddleware { private readonly RequestDelegate next; public MyCustomAuthenticationMiddleware(RequestDele ...相关文章
更多- Hadoop 解除 NameNode is in safe mode
- Hadoop 解除 “Name node is in safe mode”
- 关于Thread类中的start()方法和run()方法
- How to set up Solr on Ubuntu 10.04 (or whatever)
- Hadoop 解除 “Name node is in safe mode”
- Becoming a data scientist
- [Hadoop] Error: JAVA_HOME is not set
- 线程报错 thread
- redis 字符串(String) SET 操作
- Hadoop “Failed to set setXIncludeAware(true) for parser” 错误
最新问答
更多- 获取MVC 4使用的DisplayMode后缀(Get the DisplayMode Suffix being used by MVC 4)
- 如何通过引用返回对象?(How is returning an object by reference possible?)
- 矩阵如何存储在内存中?(How are matrices stored in memory?)
- 每个请求的Java新会话?(Java New Session For Each Request?)
- css:浮动div中重叠的标题h1(css: overlapping headlines h1 in floated divs)
- 无论图像如何,Caffe预测同一类(Caffe predicts same class regardless of image)
- xcode语法颜色编码解释?(xcode syntax color coding explained?)
- 在Access 2010 Runtime中使用Office 2000校对工具(Use Office 2000 proofing tools in Access 2010 Runtime)
- 从单独的Web主机将图像传输到服务器上(Getting images onto server from separate web host)
- 从旧版本复制文件并保留它们(旧/新版本)(Copy a file from old revision and keep both of them (old / new revision))
- 西安哪有PLC可控制编程的培训
- 在Entity Framework中选择基类(Select base class in Entity Framework)
- 在Android中出现错误“数据集和渲染器应该不为null,并且应该具有相同数量的系列”(Error “Dataset and renderer should be not null and should have the same number of series” in Android)
- 电脑二级VF有什么用
- Datamapper Ruby如何添加Hook方法(Datamapper Ruby How to add Hook Method)
- 金华英语角.
- 手机软件如何制作
- 用于Android webview中图像保存的上下文菜单(Context Menu for Image Saving in an Android webview)
- 注意:未定义的偏移量:PHP(Notice: Undefined offset: PHP)
- 如何读R中的大数据集[复制](How to read large dataset in R [duplicate])
- Unity 5 Heighmap与地形宽度/地形长度的分辨率关系?(Unity 5 Heighmap Resolution relationship to terrain width / terrain length?)
- 如何通知PipedOutputStream线程写入最后一个字节的PipedInputStream线程?(How to notify PipedInputStream thread that PipedOutputStream thread has written last byte?)
- python的访问器方法有哪些
- DeviceNetworkInformation:哪个是哪个?(DeviceNetworkInformation: Which is which?)
- 在Ruby中对组合进行排序(Sorting a combination in Ruby)
- 网站开发的流程?
- 使用Zend Framework 2中的JOIN sql检索数据(Retrieve data using JOIN sql in Zend Framework 2)
- 条带格式类型格式模式编号无法正常工作(Stripes format type format pattern number not working properly)
- 透明度错误IE11(Transparency bug IE11)
- linux的基本操作命令。。。