일례 로그인 검증으로 인한 위조 방지 표시는 현재 사용자의 문제에 적용되지 않고 성명 기반 다른 사용자에게 적용됩니다
나는 컨트롤러에서 구직 로그인 검사를 실현했다.
4
[PersonLoginCheckFilterAttribute(IsCheck = true)]
그리고 교육 교육의 action 방법에서 이루어진 것은 다음과 같다.[ValidateAntiForgeryToken] 。
나의 구직 검증 클래스는 이렇게 썼다.
///
///
///
public class PersonLoginCheckFilterAttribute : ActionFilterAttribute
{
///
///
///
public bool IsCheck { get; set; }
///
/// Action ,
///
///
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
if (IsCheck)
{
//
if (!filterContext.HttpContext.User.Identity.IsAuthenticated)
{
//
filterContext.Result = new RedirectResult("~/account/login", true);
//return;
}
var user = new LMIdentityDbContext().Users.Find(filterContext.HttpContext.User.Identity.GetUserId());
if (user == null || user.Role != "person")
{
//
filterContext.Result = new RedirectResult("~/account/login", true);
//return;
}
}
base.OnActionExecuting(filterContext);
}
}
ActionFilterAttribute를 계승했기 때문에, 나는 ActionFilterAttribute가 실현한 것이 IACtionFilter,IresultFilter 인터페이스라는 것을 안다.
Validate AntiForgeryToken 방법은 제가 역번역을 통해 실현된 인터페이스가IAuthorizationFilter라는 것을 보았습니다.
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple =false, Inherited = true)] public sealed class ValidateAntiForgeryTokenAttribute : FilterAttribute, IAuthorizationFilter
우리는 모두 mvc의 필터가 네 가지가 있다는 것을 안다.Authorization(라이센스), Action(비헤이비어), Result(결과), Exception(이상)입니다.이상은 말할 것도 없고, 실행 순서는 먼저 Authorization, 나중에 Action, 마지막에 Result입니다.상식적으로 절차는 다음과 같아야 한다. 교육 경력을 추가할 때 로그인 여부를 판단하고 로그인하지 않으면 로그인 페이지로 이동하고 로그인이 있으면 교육 경력을 추가한 action에서Validate AntiForgeryToken을 검증한다.여기에 직접 제공한 위조 방지 표시는 다른 성명을 바탕으로 하는 사용자에게 적용되고 현재 사용자의 오류에 적용되지 않는다. 내 로그인 검증이 계승된 Action Filter가Validate AntiForgery Token이 실현한 인터페이스인 IAuthorization Filter보다 늦게 실행되어 이 오류를 초래한 것으로 추정된다.따라서 이 로그인 인증 방법을 수정하고 Authorize Attribute 방법을 계승하여 문제를 해결할 수 있는지 확인하기로 결정했습니다.수정된 코드는 다음과 같습니다.
///
///
///
public class PersonLoginCheckFilterAttribute : AuthorizeAttribute
{
///
///
///
public bool IsCheck { get; set; }
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
bool hasRole = base.AuthorizeCore(httpContext);
// , , false
//EventLog.WriteLog("hasRole1:" + hasRole.ToString());
if (httpContext == null)
{
throw new ArgumentNullException("httpContext");
}
return hasRole;
}
public override void OnAuthorization(AuthorizationContext filterContext)
{
if (IsCheck)
{
if (filterContext.HttpContext.User == null)
{
return;
}
if (filterContext.HttpContext.User.Identity == null)
{
return;
}
//
if (!filterContext.HttpContext.User.Identity.IsAuthenticated)
{
//
filterContext.Result = new RedirectResult("~/account/login", true);
return;
}
var user = new LMIdentityDbContext().Users.Find(filterContext.HttpContext.User.Identity.GetUserId());
if (user == null || user.Role != "person")
{
//
filterContext.Result = new RedirectResult("~/account/login", true);
return;
}
}
base.OnAuthorization(filterContext);
}
///
///
///
///
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
base.HandleUnauthorizedRequest(filterContext);
}
}
수정 후 테스트를 진행합니다.교육 경력 추가 페이지를 열고 자료를 기입한 다음에 교육 경력 페이지를 열고 이 페이지에서 로그인을 종료합니다. 이때 자료를 제출하면 자동으로 로그인 페이지로 넘어갑니다. 위조 방지 표시가 다른 성명 기반 사용자에게 적용되지 않고 현재 사용자의 잘못된 알림에 적용되지 않습니다.문제 해결
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
작업 중 문제 해결 - (win 2003 asp. net) Session 과 페이지 전송 방법 으로 해결 방안 을 정상적으로 사용 할 수 없습니다.또한 F 는 처음에 우리 의 BP & IT 프로젝트 팀 이 Forms 폼 검증 을 사용 했다 고 판단 할 수 있 습 니 다. 페이지 를 뛰 어 넘 는 것 은http://hr.bingjun.cc/MyTask/MyTas...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.