首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >自定义授权筛选器中的MVC3会话奇怪行为

自定义授权筛选器中的MVC3会话奇怪行为
EN

Stack Overflow用户
提问于 2011-06-24 00:41:22
回答 1查看 3K关注 0票数 1

我们最近从mvc2升级到了mvc3,我们的一个自定义授权过滤器(它位于ActionResult方法上)似乎只构建了一次,但执行了多次。我们知道这一点,因为过滤器包含一个错误列表(在构造函数中更新),错误被添加到AuthorizeCore上。

自定义过滤器用于检查用户对特定操作方法的访问权限(他们的级别存储在会话中)

一些代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class SecurityAttribute : AuthorizeAttribute
    {
        public int MinAccessLevel = 1;
        public string UserRole = String.Empty;
        private List<string> _errors;

        public SecurityAttribute()
        {
            _errors = new List<string>();
        }

        public override void OnAuthorization(AuthorizationContext filterContext)
        {

            if (WebSession.AccessLevel < MinAccessLevel)
                _errors.Add("Your access level(" + WebSession.AccessLevel + ") must be " + MinAccessLevel + " or higher");

            if (!String.IsNullOrEmpty(UserRole) && WebSession.UserRole != UserRole)
                _errors.Add("Your User Role must be " + UserRole);

            if (_errors.Any())
            {
                var viewResult = new ViewResult() { ViewName = "SecurityError"};
                viewResult.ViewData.Model = new SecurityErrorViewModel(){Errors = _errors};
                filterContext.Result = viewResult;
            }
        }
    }

如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[HttpPost, Security(MinAccessLevel = 4)]
public ActionResult Complete(int id, string userid){}

视图上的输出(随机间隔)如下(在项目符号列表中)

  • 您的访问级别(6)必须是4或更高的
  • 您的访问级别(6)必须是4或更高的
  • 您的访问级别(6)必须是4或更高的
  • 您的访问级别(6)必须是4或更高的

<代码>F 211

这个问题只发生在我们升级到mvc3之后,所以我想找出为什么会发生这种情况,或者进行适当的修复。我读过关于Sessionless State控制器等的各种SO帖子,但这似乎不适合我们所面临的情况

谢谢,马克

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-06-24 03:59:09

根据MVC 3发行说明:

在以前的ASP.NET MVC版本中,动作过滤器是在每个请求的基础上创建的,少数情况除外。这种行为从来就不是一个有保证的行为,而仅仅是一个实现细节,过滤器的契约就是将它们视为无状态的。在ASP.NET MVC 3中,过滤器被更积极地缓存。因此,任何不正确地存储实例状态的自定义操作筛选器都可能被破坏。

因此,不应将错误存储在操作筛选器中。无论是直接在OnAuthorization方法中添加列表,还是如果需要访问其他地方的列表,都可以将它们存储在HttpContext.Items或Session中。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6465376

复制
相关文章
delete的奇怪行为
F的实例拥有一个value属性,但不希望在new的时候就初始化属性值(因为这个值不一定用得到,而且计算成本比较高,或者new的时候还不一定能算出来),那么自然想到通过定义getter来实现“按需计算”:
ayqy贾杰
2019/06/12
2.4K0
了解vSphere中的BPDU筛选器功能
本文介绍并提供了有关vSphere 5.1 Distributed Switch中新BPDU筛选器功能的示例。 一、什么是bpdu 桥接协议数据单元(BPDU)是在物理交换机之间交换的帧,作为生成树协议(STP)的一部分。STP用于防止网络中的环路,通常在物理交换机上启用。当物理交换机端口上的链路上升时,STP协议开始计算和BPDU交换以确定端口是否应处于转发或阻塞状态。桥接协议数据单元(BPDU)帧跨物理交换机端×××换以识别根网桥并形成树形拓扑。VMware的vSwitch不支持STP,也不参与BPDU交换。如果在vSwitch上行链路上接收到BPDU帧,则丢弃该帧。同样,VMware vSwitch不会生成BPDU帧。 注意:VMware vSwitches(标准和分布式)无法形成循环,因为无法在OSI层的第2层将两个虚拟交换机连接在一起。因此,没有生成树协议功能已合并到虚拟交换机中。
孙杰
2019/10/29
2.3K0
开发中奇怪的问题
不修改代码前好好的,刚加了些代码运行就不可以了,然后注释重新编译还是不行。
Qt君
2019/12/16
1.5K0
PHP中的会话
2、当执行php xxx.php 时,默认系统会把当前的进程设置为会话首进程(使用strace查看),所以当前会话首进程不能使用posix_setsid 创建为会话首进程,只能使用子进程调用此函数
北溟有鱼QAQ
2021/06/08
1.2K0
taskscheduler java_java – taskScheduler池的奇怪行为「建议收藏」
我有两个弹簧启动应用程序(1.4.3.RELEASE),它们位于同一台服务器上.应用程序A是一个单一的应用程序,其中包含用于处理警报的部分代码,而应用程序B是一个仅处理警报的新专用应用程序.这里的目标是打破小应用程序中的monolotic应用程序.现在,这两个代码一起运行,因为我有旧系统,总是调用应用程序A.
全栈程序员站长
2022/11/10
1.8K0
iOS 中各种奇怪的崩溃
注意,本文所有崩溃的原因都是同一个 EXC_BAD_ACCESS (code=1, address=0x11f645b98) image-20210423232626879 第一个堆栈:字典扩容 im
酷酷的哀殿
2021/04/26
1.7K1
iOS  中各种奇怪的崩溃
Spring Security 自定义授权服务器实践
在之前我们已经对接过了GitHub、Gitee客户端,使用OAuth2 Client能够快速便捷的集成第三方登录,集成第三方登录一方面降低了企业的获客成本,同时为用户提供更为便捷的登录体验。 但是随着企业的发展壮大,越来越有必要搭建自己的OAuth2服务器。 OAuth2不仅包括前面的OAuth客户端,还包括了授权服务器,在这里我们要通过最小化配置搭建自己的授权服务器。 授权服务器主要提供OAuth Client注册、用户认证、token分发、token验证、token刷新等功能。实际应用中授权服务器与资源服务器可以在同一个应用中实现,也可以拆分成两个独立应用,在这里为了方便理解,我们拆分成两个应用。
阿提说说
2022/12/02
1.3K0
NIO中那些奇怪的Buffer
妖魔鬼怪快快显形,今天F师兄帮助小师妹来斩妖除魔啦,什么BufferB,BufferL,BufferRB,BufferRL,BufferS,BufferU,BufferRS,BufferRU统统给你剖析个清清楚楚明明白白。
程序那些事
2020/07/07
9230
1.3 筛选器
数据透视表是Excel历史上最伟大的发明,然其本质上是个很简单的原理,就是一个漏斗,即筛选器。按照不同的角度筛选输出分析结果。
公众号PowerBI大师
2019/08/07
1.5K0
1.3 筛选器
Shell中各种奇怪的变量
这些变量是随系统运行而变化的,灵活使这些变量可简化我们的操作和更好地控制bash shell的行为。
老高的技术博客
2022/12/27
5570
内网渗透 | RDP会话劫持实现未授权登录
远程桌面在内网渗透中可以说是再常见不过了,在渗透测试中,拿下一台主机后有时候会选择开 3389 进远程桌面查看一下对方主机内有无一些有价值的东西可以利用。对远程桌面的利用姿势有很多,本篇文章中我们来学习一下 RDP 会话劫持的相关利用姿势。
HACK学习
2021/06/24
4.1K0
内网渗透 | RDP会话劫持实现未授权登录
PHP中的会话控制
了解HTTP(超文本传输协议)可以知道,它采用请求与响应的模式,最大的特点就是无连接无状态。 无连接:每次连接仅处理一个客户端的请求,得到服务器响应后,连接就结束了 无状态:每个请求都是独立的,服务器
小古哥
2018/03/08
1.7K0
PHP中的会话控制
sql连接查询中on筛选与where筛选的区别
sql查询这个东西, 要说它简单, 可以很简单, 通常情况下只需使用增删查改配合编程语言的逻辑表达能力,就能实现所有功能。 但是增删查改并不能代表sql语句的所有, 完整的sql功能会另人望而生畏。 就拿比普通增删查改稍微复杂一个层次的连接查询来说, 盲目使用, 也会出现意料之外的危险结果,导致程序出现莫名其妙的BUG。 在连接查询语法中,另人迷惑首当其冲的就要属on筛选和where筛选的区别了, 在我们编写查询的时候, 筛选条件的放置不管是在on后面还是where后面, 查出来的结果总是一样的, 既然
用户1608022
2018/04/11
3.4K0
sql连接查询中on筛选与where筛选的区别
细数 TS 中那些奇怪的符号
TypeScript 是一种由微软开发的自由和开源的编程语言。它是 JavaScript 的一个超集,而且本质上向这个语言添加了可选的静态类型和基于类的面向对象编程。
阿宝哥
2020/09/10
6K1
细数 TS 中那些奇怪的符号
精通MVC3摘译(3)-自定义路由系统
如果你不喜欢标准路由对象匹配URL的方式,或者你想实现一些特殊的接口,你可以从RouteBase中继承一个类。让你可以控制URL匹配,参数如何解析,URL链接如何生成。从RouteBase继承,你需要实现2个方法:
py3study
2020/01/03
5820
精通MVC3摘译(3)-自定义路由系统
shiro中的授权
授权,即访问控制,控制谁能访问哪些资源。主体进行身份认证后需要分配权限方可访问系统的资源,对于某些资源没有权限是无法访问的。
别团等shy哥发育
2023/02/25
4620
shiro中的授权
Asp.Net Core 中IdentityServer4 授权中心之自定义授权模式
上一篇我分享了一篇关于 Asp.Net Core 中IdentityServer4 授权中心之应用实战的文章,其中有不少博友给我提了问题,其中有一个博友问我的一个场景,我给他解答的还不够完美,之后我经过自己的学习查阅并阅读了相关源代码,发现 IdentityServer4 可以实现自定义GrantType 授权方式。
Jlion
2022/04/07
1.5K0
Asp.Net Core 中IdentityServer4 授权中心之自定义授权模式
PHP中in_array奇怪的问题
    按正常来说,这个肯定不在数组中,输出应该是false,但是这段代码输出却是true。
XiaoA
2023/05/24
4550
Python中的9个“奇怪”的现象
最近在网上偶然发现了很多“奇怪”的Python代码片段。本文,我与你们分享其中一些。
一墨编程学习
2019/05/10
9510
Python中的9个“奇怪”的现象
【说站】js中如何自定义迭代行为
1、可迭代对象是实现了@@iterator方法的对象,那么可迭代对象就可以通过重写@@iterator方法实现自定义迭代行为。
很酷的站长
2022/11/23
9420
【说站】js中如何自定义迭代行为

相似问题

自定义授权筛选器中的访问会话

13

操作筛选器检查会话MVC3

10

dplyr::filter和筛选器的奇怪行为

250

codeigniter中奇怪的会话行为

22

MVC3中基于会话值的控制器授权

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文