首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

是否可以在CustomAttribute中重新绑定IPrincipal?

在CustomAttribute中重新绑定IPrincipal是不可能的。CustomAttribute是用于在运行时修改或扩展程序集中的类型的元数据的机制。它可以用于添加、修改或删除类型的成员,但不能直接用于重新绑定IPrincipal。

IPrincipal是.NET中的接口,用于表示当前执行代码的用户身份信息。它包含了用户的标识和角色信息。在ASP.NET中,IPrincipal通常由HttpContext.User属性提供。

要重新绑定IPrincipal,可以通过创建一个新的实现了IPrincipal接口的类,并在其中实现自定义的身份验证逻辑。然后,在需要重新绑定的地方,将HttpContext.User属性设置为新的IPrincipal实例。

以下是一个示例代码:

代码语言:txt
复制
public class CustomPrincipal : IPrincipal
{
    private IIdentity _identity;
    private string[] _roles;

    public CustomPrincipal(IIdentity identity, string[] roles)
    {
        _identity = identity;
        _roles = roles;
    }

    public IIdentity Identity
    {
        get { return _identity; }
    }

    public bool IsInRole(string role)
    {
        return _roles.Contains(role);
    }
}

// 在需要重新绑定的地方
var identity = new GenericIdentity("username");
var roles = new string[] { "role1", "role2" };
var principal = new CustomPrincipal(identity, roles);
HttpContext.Current.User = principal;

在上述示例中,我们创建了一个CustomPrincipal类,实现了IPrincipal接口,并在IsInRole方法中实现了自定义的角色验证逻辑。然后,我们创建了一个新的CustomPrincipal实例,并将其赋值给HttpContext.Current.User属性,从而重新绑定了IPrincipal。

需要注意的是,重新绑定IPrincipal只对当前请求有效,不会影响其他请求。如果需要在整个应用程序中重新绑定IPrincipal,可以考虑使用ASP.NET的身份验证模块或自定义的身份验证过滤器来实现。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

PHP检测一个类是否可以被foreach遍历

PHP检测一个类是否可以被foreach遍历 PHP,我们可以非常简单的判断一个变量是什么类型,也可以非常方便的确定一个数组的长度从而决定这个数组是否可以遍历。那么类呢?...我们要如何知道这个类是否可以通过 foreach 来进行遍历呢?其实,PHP已经为我们提供了一个现成的接口。...而第二个 $obj2 则是实现了迭代器接口,这个对象是可以通过 Traversable 判断的。PHP手册,Traversable 接口正是用于检测一个类是否可以被 foreach 遍历的接口。...这是一个无法 PHP 脚本实现的内部引擎接口。IteratorAggregate 或 Iterator 接口可以用来代替它。...相信我们决大部分人也并没有使用过这个接口来判断过类是否可以被遍历。但是从上面的例子我们可以看出,迭代器能够自定义我们需要输出的内容。相对来说比直接的对象遍历更加的灵活可控。

2K10
  • 从两个重要的概念谈起:Identity与Principal

    绝大部分的授权都是围绕着“角色”进行的,我们将一组相关的权限集和一个角色绑定,然后分配给某个用户。所以基于角色授权环境下,我们可以简单地将安全主体表示成:身份 + 角色。....NET基于安全的应用编程接口中,通过IPrincipal接口表示安全主体。...IPrincipal的定义体现在如下的代码片断,从中我们可以看出IPrincipal仅仅具有两个成员。...{ get; set; } 5: } 一旦为当前线程设置了安全主体,需要确定当前用户是否有权限执行某项操作或者访问某个资源的时候,就可以通过上述的这个CurrentPrincipal属性将设置的安全主体获取出来...四个访均在Try/Catch执行,指定之前一个GenericPrincipal对象被创建并设置成当前线程的安全主体。

    1.1K90

    【翻译】MotionLayout实现折叠工具栏(Part 1)

    当然实际 App 开发过程我应该会使用 AppBarLayout 布局配合 Toolbar 控件吧。 如果在设计视图中查看这个布局,我们能看到布局所展示的工具栏处于展开的状态: ?...元素 OnSwipe 把过渡动画和用户 RecyclerView 上的拖拽操作绑定到了一起,也就是之前我们查看到的主布局的列表。...我们使用的是一个标准的 ImageView 控件,当其位于 ConstraintSet 下的 Constraint 元素时,其主要的属性变成可以是 ConstraintLayout.LayoutParams...的任何一个属性,也可以是 View 的任何一个属性,但即使像 ImageView 这类作为 View 的子类控件,我们仍然需要使用一个 CustomAttribute 符号,这里实际上和 ObjectAnimator...如果你对为什么这里选择缩放而非直接通过一个 CustomAttribute 改变 textSize 来实现表示怀疑的话,那么你要知道,在这里的理由就是因为相比简单直接地文本上应用一个形变,通过改变文本大小和重新渲染会非常耗计算资源

    1.9K31

    linux 我安装了一个命令行,是否所有用户都可以使用这个命令,比如 docker?

    ---- 问: linux系统里,普通用户目录是 /home 下,root用户目录在 /root,因此全部用户共享目录的。 那如果我们要装一个东西的话,是不是只用装一遍?...(比如说ohmyzsh之类的) 我之前自己服务器上,每次都需要安装两遍,一次只有当前那个用户生效,这是为什么呢?...---- 答: 不一定,当我们说我们 linux 装了一个东西,指的是:「我们装了一个命令,可全局执行」。此时是将该命令放在了全局执行目录(或者将该命令目录放在了 $PATH)。...哦对,PATH 该路径列表可自定义,而每一个用户都可以有独立的 PATH 环境变量。...所以,要看一个命令是所有用户共享还是仅对当前用户有效,具体要看该命令是怎么装的,可以看看 which command 进一步排查。

    7.3K60

    .NET Core反射获取带有自定义特性的类,通过依赖注入根据Attribute元数据信息调用对应的方法

    前言   前段时间有朋友问道一个这样的问题,.NET Core如何通过Attribute的元数据信息来调用标记的对应方法。...C#反射指的是什么? 开篇之前首先和大家简单介绍一下反射的概念和作用。 C# ,反射是指在运行时动态地获取类型的信息并操作对象的能力。...使用反射,我们可以代码访问程序集、模块、成员等,并且可以操作这些成员的属性、方法、字段和事件等。...这是一种常用的实现方式,可以使用依赖注入解耦程序各个组件之间的依赖关系,方便测试和维护。...这是一种常用的实现方式,可以使用依赖注入解耦程序各个组件之间的依赖关系,方便测试和维护。

    1.2K30

    .net的认证(authentication)与授权(authorization)

    用Membership/Role做过asp.net开发的朋友们,看到这二个接口的定义,应该会觉得很眼熟,想想我们Asp.Net页面是如何判断用户是否登录以及角色的?...这二个接口同样也能用在Winform程序,下面将创建一个WinForm应用,里面有二个窗口:Form1以及Form2,可以把Form1当成登录界面,而Form2则是程序主窗口,很多管理软件,主窗口都要求登录以后才能访问...其实...就算不用membership/role,上面提到的这二个接口仍然是可以使用的,但有一个问题:winformIPrincipal接口的实例可以一直存储在内存(直到程序退出),所以其它窗口就能继续访问它...,以便做进一步的判断,但是webform,页面本身是无状态的,一旦服务器输出html到客户端浏览器后,客户端的页面就与服务器再无瓜葛了(你甚至可以离线浏览,前提是不刷新),那么最后的认证信息保存在什么地方呢...顺便再回忆一下Asp.Net的页面生命周期,每个AspX页面在请求认证时,都会触发Application_AuthenticateRequest事件,而这个事件是定义Global.ascx的,所以可以从这个入手

    1.7K100

    Asp.Net 用户验证(自定义IPrincipal和IIdentity)

    由数据库带回了正确的密码之后,我们只需要在程序与用户输入的密码进行对比就可以知道用户的密码是否正确。...类型,它含有一个UserData字符串属性可以用于承载我们的用户数据,遗憾的是这个属性是只读的,为了给这个属性赋值,我们需要重新新构建一个FormsAuthenticationTicket,并在构造函数传入我们想要添加的用户信息...实际上,我们可以自定义一个IPrincipal和IIdentity来完成,接下来就来看一下。...自定义IPrincipal和IIdentity 不管是Windows上还是Web上,.Net都使用这两个接口来实现用户的身份验证。...可以看到我们获得了定义CustomIdentity的属性。

    1.7K31

    MotionLayout教你轻松玩转动画

    除此之外,MotionLayoutAndroid Studio做了完美优化,提供了它专有的工具,能让开发者通过界面化的方式来更好的实现动画效果。...对应的就是activity_motion_layout_scene文件 下面我们来看下文件具体内容 MotionScene MotionLayout,如果你需要做动画,需要使用MotionScene...这些代码层面都是xml <Transition app:constraintSetEnd="@id/end" app:constraintSetStart="...<em>CustomAttribute</em> <em>在</em>ConstraintSet除了位置边界属性设置之外,还包含了其它的内置属性,例如: alpha visibility elevation rotation translation...针对定制化的动画,MotionLayout也提供了解决方案,具体实现方式<em>可以</em>期待之后的文章。 最后来个调查:你<em>是否</em>觉得MotionLayout让动画实现更加趋于简单了呢?

    1.1K20

    ConstraintLayout2.0一篇写不完之MotionLabel

    MotionLabel是CL2.1新加入的一个为单行文字制作动画的View,它支持下面几种典型的动画效果: 使用PanX和PanY取代Gravity,它是一个float值,-1是左,0是中心,+1是右,它可以对位置进行动画...可以设置文本轮廓的厚度和颜色,并设置它的动画效果 给文本的背景设置颜色或纹理 确保textSize的动画效果顺滑 ❝那么问题来了,只支持单行??...通过CustomAttribute给textBackgroundPanX和textBackgroundPanY设置-1到1的变换,就可以实现纹理背景移动的动画效果。...textPan 文字MotionLabel的偏移,使用的是textPanX和textPanY,同样是通过-1到1来实现定位。...通过CustomAttribute给textPanX和textPanY设置-2到2的变换,就可以实现文字的偏移动画。 动画就不贴了,太麻烦了,最后会有一个惊喜大Demo,满足你的一切幻想。

    57110

    Android-MotionLayout动画

    dragDirection理解,二者相反 xml布局文件和motionscene的文件,控件的id不能少,Constraint标签layout_打头的属性都要有,其余可以省略比如src属性,因为...xml已经赋值了 我们现在看一下效果,可以design面板先预览一下: image.png 点击1所指的start可以预览start状态,点击2所指的end预览end状态。...根布局添加app:showPaths="true"可以在手机上看到动画的移动轨迹,我们加入一下 运行看效果: image2.gif 但是我们看这个收藏按钮的运动轨迹有点单调,就是直线从A点到B点...xml已经设置过了. id :用来指定布局对应的view CustomAttribute: 包含在Constraint元素,一个 本身包含两个属性 1.motion...-- 注意:Constraint里的属性可以不用写已经xml配置过的非layout开头的,除了id, 而layout_开头的属性可以直接写值--

    1.1K40

    Asp.net mvc 知多少(八)

    我们可以配置自定义的过滤器为以下三个级别: Global level(全局级别) 将过滤器注册到Global.asax.cs文件的Application_Start方法: protected void...ASP.NET MVC认证和授权是如何工作的? Ans. 像 ASP.NET一样,MVC 也支持 Windows 和Forms 认证。可以通过Web.config配置或自己编码。 Q84....和 ASP.NET一样, MVC Forms authenticationIIS认证完成之后发生。可以 ASP.NET MVC应用程序的Web.config文件的forms节点进行配置。...可以指定cookie的名称、 版本、目录路径、生效日期、过期日期、是否永久属性来创建FormsAuthenticationTicket对象 。...ASP.NET 提供了IPrincipal 和IIdentity接口来表示用户的身份和角色。这两个接口 绑定到HttpContext对象和当前线程。可以通过实习这两个接口来创建自定义的方案。

    1.4K90

    性能优化总结(五):CSLA服务端如何使用多线程的解决方案

    那么我们来看这个属性CSLA的源代码: private static IPrincipal _principal; public static IPrincipal User {     get    ...这里,其实是作者的一个小BUG:他认为使用WPF的程序应该就是客户端,所以直接存储静态变量。但是我们的服务端也是WPF来实现的,所以就导致了无法为每个线程使用独立的数据。...这样,服务端在请求被处理的开始阶段对_principal赋值时,就存储了当前线程,而不会影响其它线程。...:)     这样只是保证了WCF用于处理请求的线程,ApplicationContext.User属性的值是正确的。但是我们处理一个单独的请求时,又很有可能手工打开更多的线程来为它服务。...我们的处理方案是,在手工申请异步执行的方法实现,为传入的异步操作加一层“包裹器”,例如下面这个API,它是用来给客户程序调用异步操作的,当时只是封装了线程池的简单调用,为的就是方便将来做扩展(例如我们可以改为

    69780

    五分钟完全弄懂C#特性

    前言 工作或者学习,难免或多或少的接触到特性这个东西,可能你不太清楚什么是特性,那么我给大家举两个例子 [Obsolete],[HttpGet],[HttpPost],[Serizlized],[AuthorizeFilter...特性(Attribute)的名称和值是方括号内规定的,放置它所应用的元素之前。positional_parameters 规定必需的信息,name_parameter 规定可选的信息。...特性的定义 特性的定义:直接或者间接的继承 Attribute 类 定义完就直接可以方法前面用 [CustomAttribute] 可以省略 Attribute 写成[Custom] 特性类上面的特性.../// AttributeTargets.All --可以修饰的应用属性 /// AllowMultiple = true ---是否可以进行多次修饰 [AttributeUsage(AttributeTargets.All...(orm)就是一个很好的案例 首先定义个类,假装和数据库的表结构一样,但表明是t_student 可以通过两个方法来获取表名(方法1加字段,或者扩展方法tostring,但都破坏了以前的封装,不提倡这样做

    82840

    【翻译】MotionLayout实现折叠工具栏(Part 2)

    这也很好的解释了我们所看到的 MotionLayout 对动画行为的实现。 利用关键帧特性我们甚至可以做到修改相关的行为动画,使得这些行为动画时间整个过渡动画中往后延迟。...每一个字段还定义了一个 CustomAttribute 元素,它的意思和我们之前开头、结尾状态定义的意思是一样的。...更牛逼的是,我们可以动画进行时对动画进行动态更改。...最后值得一提的是:有时候它还能帮我们实现过渡动画的可视化,我们可以通过开启布局的 showPaths 属性来实现: <?xml version="1.0" encoding="utf-8"?...你只需要记得最终发布版本要关闭这个功能——我建议定义一个布尔值资源,布局中使用,然后你就可以发布版本时总能设置它为 false 就可以了。 好吧,这次就到这里。

    1.7K30

    通过扩展自行实现服务授权

    其实针对安全主体的授权实现的原理很简单,原则上讲,只要你能在服务操作执行之前能够根据本认证的用户正确设置当前的安全主体就可以了。...如果你了解WCF的整个运行时框架结构,你会马上想到用于授权的安全主体初始化可以通过自定义CallContextInitializer来实现。...那么我么就可以自定义CallContextInitializer,BeforeInvoke初始化当前的安全主体。...为了让服务操作执行之后当前线程的上下文恢复到执行前的状态,BeforeInvoke方法当前的安全主体被保存下来,并传递给AfterInvoke方法恢复当前线程的原来的安全主体。...实现的GetPrincipal抽象方法,借助于RoleProvider获取基于当前用户的所有角色,并创建GenericPrincipal。

    732100

    ConstraintLayout2.0一篇写不完之约束到底写在哪

    MotionLayout,约束可以写在三个地方。 直接写在MotionLayout:如果布局简单,那么可以直接写在MotionLayout,这样Scene的约束会直接继承Layout。...写在单独的CL:Transition的State不仅仅可以使用ConstraintSet,也可以使用单独的ConstraintLayout布局文件。...Sectioned Constraints 前面说了,Scene的ConstraintSet,你需要对每个发生变化的元素创建Constraint,而且一旦你创建了这个元素的Constraint,那么...相关的属性,例如pathMotionArc、TransitionEasing等 CustomAttribute:这里你可以修改你设置的CustomAttribute 借助它们,可以少写无关的重复属性,简化代码...使用这些标签的好处是,如果不存在这些属性,则从基本布局文件获取。如果只需要一个Motion标签,这就可以省去复制所有的布局标签。如果使用了这些标签,那么基础文件的所有布局属性都会被覆盖。

    79620

    【asp.net core 系列】13 Identity 身份验证入门

    ,这个特性类允许设置类、方法上,可以设置多个,允许子类继承父类的特性。...所以可以控制器上设置[Authorize],当在控制器上设置以后访问控制器里所有的Action都会要求验证身份;也可以单独设置Action上,表示该Action需要验证身份,控制器里的其他方法不需要验证...1.2 设置忽略 我们开发过程,会遇到这样的一组链接或者页面:请求地址同属于一个控制器下,但其中某个地址可以不用用户登录就可以访问。...asp.net core,Controller类里有一个属性: public HttpContext HttpContext { get; } HttpContext 提供了一个扩展方法,可以用来保存用户信息...Cookie里了,那么如何在控制器获取到数据呢: public ClaimsPrincipal User { get; } 控制器,提供了这样一个属性,当然如果想要正确获取到值的话,需要在 Startup.cs

    99220
    领券