需求:要实现运行状态下修改管理后台的页面地址
实现:使用urlRewrite 来实现
netcore已经为我们做好了url重写中间件
services.AddSingleton<RewriteOptions>(); 这里注入 RewriteOptions 为了使运行时能够动态添加url重写路径配置,注册成单例
RewriteOptions options = app.ApplicationServices.GetService(typeof(RewriteOptions)) as RewriteOptions;
options.AddRewrite("admins/(.*)", "admin/$1", skipRemainingRules: true);
/*可以增加更多的重写配置*/
app.UseRewriter(options);
上面代码中的 admins 是要求灵活配置的,可能是 adm/ cadm / hhh /等,用户任意配置的
这些几句就可以实现重写了,当然,如果碰到 /admin开头的地址,你可以配置返回 404
app.MapWhen(context => context.Request.Path.StartsWithSegments("/admin"), appBuilder =>
{
appBuilder.Run(async (context) =>
{
context.Response.StatusCode = StatusCodes.Status404NotFound;
await context.Response.WriteAsync("这里写上404的提示语句,理论上可以直接响应一个html页面接口的代码");
});
});
又因为我的登录地址也在 /admin 下,此时导致了用户未登录会跳转到 /admin/account/login 地址上,这个此时时404 ,因为我们上边对 /admin 做了404响应,以及和下面代码的综合作用
services.AddAuthentication(options =>
{
options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme; ;
}).AddCookie(CookieAuthenticationDefaults.AuthenticationScheme, options =>
{
options.ClaimsIssuer = "npress"; //发行者
options.Cookie.Name = "identity";
options.Cookie.HttpOnly = true; //只读
options.AccessDeniedPath = "/admin/account/forbidden";
options.LoginPath = "/admin/account/login";
Configuration.Bind("CookieSettings", options);
});
此时有两个解决方案,写一个中间页面,不在 admin下的页面,来检测用户对后台地址的配置,然后跳转
另外一个方案就是修改 "options.LoginPath"
方案一不表述了
下面讲下方案二的做法:运行时修改 cookie 的 LoginPath
IOptionsMonitor<CookieAuthenticationOptions> cookieMonitor = app.ApplicationServices.GetService(typeof(IOptionsMonitor<CookieAuthenticationOptions>)) as IOptionsMonitor<CookieAuthenticationOptions>;
CookieAuthenticationOptions cookiesOptions = cookieMonitor.Get(CookieAuthenticationDefaults.AuthenticationScheme); //因为这里我们用的是默认的 scheme名字(Cookies)
cookiesOptions.LoginPath = "/" + admin_address_folder + "/account/login";
cookiesOptions.AccessDeniedPath = "/" + admin_address_folder + "/account/forbidden";
上面代码可以在启动时配置到 starup中
也可以在 action中执行,都能达到执行效果
本文链接:https://blog.nnwk.net/article/55
有问题请留言。版权所有,转载请在显眼位置处保留文章出处,并留下原文连接
Leave your question and I'll get back to you as soon as I see it. All rights reserved. Please keep the source and links
友情链接:
子卿全栈
全部评论