public void Configuration(IAppBuilder app) { var authorizationFilter = new BasicAuthAuthorizationFilter( new BasicAuthAuthorizationFilterOptions { // Require secure connection for dashboard RequireSsl = true, // Case sensitive login checking LoginCaseSensitive = true, // Users Users = new[] { new BasicAuthAuthorizationUser { Login = "******", PasswordClear = "passW0rd!" } } }); var options = new DashboardOptions { AuthorizationFilters = new IAuthorizationFilter[] { authorizationFilter } }; GlobalConfiguration.Configuration.UseSqlServerStorage("DefaultConnection"); app.UseHangfireDashboard("/hangfire", options); app.UseHangfireServer(); ConfigureAuth(app); }
public static void UseAuthenticatedHangfireDashboard(this IApplicationBuilder app, IConfiguration configuration) { var filter = new BasicAuthAuthorizationFilter( new BasicAuthAuthorizationFilterOptions { // Require secure connection for dashboard RequireSsl = false, SslRedirect = false, // Case sensitive login checking LoginCaseSensitive = true, // Users Users = new[] { new BasicAuthAuthorizationUser { Login = configuration["Hangfire:Dashboard:Username"], // Password as plain text, SHA1 will be used PasswordClear = configuration["Hangfire:Dashboard:Password"] } } }); var options = new DashboardOptions { DashboardTitle = "De Urgenta Hangfire Dashboard", Authorization = new IDashboardAuthorizationFilter[] { filter } }; app.UseHangfireDashboard(options: options); }
public static IApplicationBuilder UseHangfire(this IApplicationBuilder app) { GlobalJobFilters.Filters.Add(new OneYearExpirationTimeAttribute()); var filter = new BasicAuthAuthorizationFilter( new BasicAuthAuthorizationFilterOptions { RequireSsl = false, LoginCaseSensitive = true, Users = new[] { new BasicAuthAuthorizationUser { Login = "******", PasswordClear = "Test$123" } } }); app.UseHangfireServer(); app.UseHangfireDashboard("/hangfire", new DashboardOptions { Authorization = new List <IDashboardAuthorizationFilter>() //Authorization = new[] { filter } // Basic auth with logic/password defined //Authorization = new[] { new HangfireAuthorizationFilter() } // Login in the future maybe with httpContext authorization, based on role, etc. }); return(app); }
public static void UseHangfire(this IApplicationBuilder app, IConfiguration configuration) { ////配置访问权限 //app.UseHangfireServer(); //访问权限 var authorFilter = new BasicAuthAuthorizationFilter( new BasicAuthAuthorizationFilterOptions { SslRedirect = false, RequireSsl = false, LoginCaseSensitive = false, Users = new[] { new BasicAuthAuthorizationUser { Login = configuration[$"{CONFIGROOT}:AuthorConfig:UserName"], PasswordClear = configuration[$"{CONFIGROOT}:AuthorConfig:Password"] } } }); app.UseHangfireDashboard(options: new DashboardOptions { Authorization = new[] { authorFilter } }); var i = ConfigHelper.GetInt("HangfireConfig:Enable"); if (i == 1) { //RecurringJob.AddOrUpdate<INewsApplicationService>(x => x.InsertNews(NewsTypeEnum.top), Cron.Hourly); //RecurringJob.AddOrUpdate<INewsApplicationService>(x => x.DeleteNews(), Cron.Weekly(DayOfWeek.Monday), TimeZoneInfo.Local); } }
public void Configuration(IAppBuilder app) { // 有关如何配置应用程序的详细信息,请访问 http://go.microsoft.com/fwlink/?LinkID=316888 GlobalConfiguration.Configuration .SetDataCompatibilityLevel(CompatibilityLevel.Version_170) .UseSimpleAssemblyNameTypeSerializer() .UseRecommendedSerializerSettings() .UseSqlServerStorage("ShenOnlineJob", new SqlServerStorageOptions() { CommandBatchMaxTimeout = TimeSpan.FromMinutes(5), SlidingInvisibilityTimeout = TimeSpan.FromMinutes(5), QueuePollInterval = TimeSpan.Zero, UseRecommendedIsolationLevel = true, UsePageLocksOnDequeue = true, DisableGlobalLocks = true }) .UseConsole(); GlobalConfiguration.Configuration .UseDashboardMetric(DashboardMetrics.AwaitingCount) .UseDashboardMetric(DashboardMetrics.DeletedCount) .UseDashboardMetric(DashboardMetrics.EnqueuedAndQueueCount) .UseDashboardMetric(DashboardMetrics.EnqueuedCountOrNull) .UseDashboardMetric(DashboardMetrics.FailedCount) .UseDashboardMetric(DashboardMetrics.FailedCountOrNull) .UseDashboardMetric(DashboardMetrics.ProcessingCount) .UseDashboardMetric(DashboardMetrics.RecurringJobCount) .UseDashboardMetric(DashboardMetrics.RetriesCount) .UseDashboardMetric(DashboardMetrics.ScheduledCount) .UseDashboardMetric(DashboardMetrics.ServerCount) .UseDashboardMetric(DashboardMetrics.SucceededCount) .UseDashboardMetric(SqlServerStorage.ActiveConnections) .UseDashboardMetric(SqlServerStorage.TotalConnections); BasicAuthAuthorizationFilter filter = new BasicAuthAuthorizationFilter(new BasicAuthAuthorizationFilterOptions { SslRedirect = false, RequireSsl = false, LoginCaseSensitive = true, Users = new[] { new BasicAuthAuthorizationUser { Login = "******", PasswordClear = "123456" } } }); // SslRedirect 是否将所有非SSL请求重定向到SSL URL // RequireSsl 需要SSL连接才能访问HangFire Dahsboard。强烈建议在使用基本身份验证时使用SSL // LoginCaseSensitive 登录检查是否区分大小写 // Password 密码 SHA1 hash 【Password = new byte[] { 0x7c,0x4a,0x8d,0x09,0xca,0x37,0x62,0xaf,0x61,0xe5,0x95,0x20,0x94,0x3d,0xc2,0x64,0x94,0xf8,0x94,0x1b }】 DashboardOptions options = new DashboardOptions { Authorization = new[] { filter } }; app.UseHangfireDashboard("/Hangfire", options); //app.UseHangfireServer(); }
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { app.UseExceptionHandler("/Home/Error"); } app.UseStaticFiles(); app.UseRouting(); app.UseAuthorization(); var filter = new BasicAuthAuthorizationFilter( new BasicAuthAuthorizationFilterOptions { SslRedirect = false, RequireSsl = false, LoginCaseSensitive = false, Users = new[] { new BasicAuthAuthorizationUser { Login = Configuration["Hangfire:Login"], PasswordClear = Configuration["Hangfire:PasswordClear"] } } }); app.UseHangfireDashboard("", new DashboardOptions { Authorization = new[] { filter }, }); var jobOptions = new BackgroundJobServerOptions { Queues = new[] { "critical", "test", "default" }, WorkerCount = Environment.ProcessorCount * int.Parse(Configuration["Hangfire:ProcessorCount"]), ServerName = Configuration["Hangfire:ServerName"], SchedulePollingInterval = TimeSpan.FromSeconds(1), //计划轮询间隔 支持任务到秒 }; app.UseHangfireServer(jobOptions); }
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, IHostingEnvironment env, IGlobalConfiguration hangfire, IOptions <HangfireOption> hangfireOption) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { app.UseHsts(); } hangfire.UseConsole(); hangfire.UseHangfireHttpJob(); var filter = new BasicAuthAuthorizationFilter(new BasicAuthAuthorizationFilterOptions { // Require secure connection for dashboard RequireSsl = false, SslRedirect = false, // Case sensitive login checking LoginCaseSensitive = true, // Users Users = hangfireOption.Value.Users.Select(d => new BasicAuthAuthorizationUser { Login = d.UserName, PasswordClear = d.Password }) }); app.UseHangfireServer(new BackgroundJobServerOptions { ServerName = "ERP background job", }); app.UseHangfireDashboard("", new DashboardOptions { Authorization = new[] { filter } }); app.UseMvc(routes => { routes.MapRoute( name: "default", template: "{controller=Home}/{action=Index}/{id?}"); }); }
public void Configuration(IAppBuilder app) { GlobalConfiguration.Configuration.UseSqlServerStorage("Data Source=localhost;User Id=sa;Password=123456;Database=HangFireSimple;Pooling=true;Max Pool Size=5000;Min Pool Size=0;"); var filter = new BasicAuthAuthorizationFilter( new BasicAuthAuthorizationFilterOptions { //SSL不启用 SslRedirect = false, //需要仪表板的安全连接SSL RequireSsl = false, //区分大小写的登录检查 LoginCaseSensitive = false, Users = new[] { new BasicAuthAuthorizationUser //最高管理员 { Login = "******", //用户名 PasswordClear = "afandxx" //密码 }, //开发人员统一账号 new BasicAuthAuthorizationUser { Login = "******", //用户名 PasswordClear = "romens" //密码 }, //实施人员统一账号 new BasicAuthAuthorizationUser { Login = "******", //用户名 PasswordClear = "romens" //密码 }, } }); //修改映射URL app.UseHangfireDashboard("/TaskQueue/Manager", new DashboardOptions() { AuthorizationFilters = new[] { filter } }); app.UseHangfireServer(); }
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) { var filter = new BasicAuthAuthorizationFilter( new BasicAuthAuthorizationFilterOptions { SslRedirect = false, // 是否将所有非SSL请求重定向到SSL URL RequireSsl = false, // 需要SSL连接才能访问HangFire Dahsboard。强烈建议在使用基本身份验证时使用SSL LoginCaseSensitive = false, //登录检查是否区分大小写 Users = new[] { new BasicAuthAuthorizationUser { Login = Configuration["Hangfire:Login"], PasswordClear = Configuration["Hangfire:PasswordClear"] } } }); app.UseHangfireDashboard("", new DashboardOptions { Authorization = new[] { filter }, }); //配置要处理的队列列表 ,如果多个服务器同时连接到数据库,会认为是分布式的一份子。可以通过这个配置根据服务器性能的按比例分配请求,不会导致服务器的压力。不配置则平分请求 var jobOptions = new BackgroundJobServerOptions { Queues = new[] { "critical", "test", "default" }, //队列名称,只能为小写 排在前面的优先执行 WorkerCount = Environment.ProcessorCount * int.Parse(Configuration["Hangfire:ProcessorCount"]), //并发任务数 --超出并发数。将等待之前任务的完成 (推荐并发线程是cpu 的 5倍) ServerName = Configuration["Hangfire:ServerName"], //服务器名称 }; app.UseHangfireServer(jobOptions); //启动hangfire服务 Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); //这是为了防止中文乱码 loggerFactory.AddNLog(); //添加NLog env.ConfigureNLog("nlog.config"); //读取Nlog配置文件 app.UseMvc(); }
public bool Authorize(DashboardContext context) { var filter = new BasicAuthAuthorizationFilter( new BasicAuthAuthorizationFilterOptions { RequireSsl = true, LoginCaseSensitive = true, Users = new[] { new BasicAuthAuthorizationUser { Login = ConfigurationManager.AppSettings["BasicAuth:Proximity:Key"], PasswordClear = ConfigurationManager.AppSettings["BasicAuth:Proximity:Password"] }, new BasicAuthAuthorizationUser { Login = ConfigurationManager.AppSettings["BasicAuth:System:Key"], PasswordClear = ConfigurationManager.AppSettings["BasicAuth:System:Password"] }, new BasicAuthAuthorizationUser { Login = ConfigurationManager.AppSettings["BasicAuth:External:Key"], PasswordClear = ConfigurationManager.AppSettings["BasicAuth:External:Password"] } } }); var hasAccess = filter.Authorize(context.GetOwinEnvironment()); if (hasAccess) { var user = new GenericIdentity("Hangfire"); var principal = new GenericPrincipal(user, null); Thread.CurrentPrincipal = principal; } return(hasAccess); }
public void Configuration(IAppBuilder app) { // 有关如何配置应用程序的详细信息,请访问 https://go.microsoft.com/fwlink/?LinkID=316888 app.MapSignalR(); GlobalConfiguration.Configuration.UseStorage(new MemoryStorage()); var filter = new BasicAuthAuthorizationFilter( new BasicAuthAuthorizationFilterOptions { SslRedirect = false, // Require secure connection for dashboard RequireSsl = false, // Case sensitive login checking LoginCaseSensitive = false, // Users Users = new[] { new BasicAuthAuthorizationUser { Login = "******", //用户名 Password01! // Password as SHA1 hash Password = new byte[] { 0x58, 0x1d, 0xb3, 0x1d, 0x94, 0x0f, 0xe9, 0x62, 0x25, 0xfa, 0xf4, 0x5b, 0x1a, 0x14, 0x82, 0x50, 0x35, 0x0d, 0x35, 0x3b } } } }); var options = new DashboardOptions { AppPath = VirtualPathUtility.ToAbsolute("~"), AuthorizationFilters = new IAuthorizationFilter[] { filter } }; app.UseHangfireDashboard("/hangfire", options); app.UseHangfireServer(); StaticData.InitStationConfig(); // InitBackgroundJob(); }
/// <summary> /// 配置账号模板信息 /// </summary> /// <returns></returns> public static DashboardOptions HfAuthor() { var filter = new BasicAuthAuthorizationFilter( new BasicAuthAuthorizationFilterOptions { SslRedirect = false, RequireSsl = false, LoginCaseSensitive = false, Users = new[] { new BasicAuthAuthorizationUser { Login = "******", //可视化的登陆账号 PasswordClear = "admin" //可视化的密码 } } }); return(new DashboardOptions { Authorization = new[] { filter } }); }
public void Configure(IApplicationBuilder app, IConfiguration Configuration) { app.InitializeApplication(); app.UseAuthorization(); var filter = new BasicAuthAuthorizationFilter( new BasicAuthAuthorizationFilterOptions { SslRedirect = false, RequireSsl = false, LoginCaseSensitive = false, Users = new[] { new BasicAuthAuthorizationUser { Login = Configuration["Hangfire:Login"], PasswordClear = Configuration["Hangfire:PasswordClear"] } } }); app.UseHangfireDashboard("", new DashboardOptions { Authorization = new[] { filter }, }); var jobOptions = new BackgroundJobServerOptions { Queues = new[] { "critical", "test", "default" }, WorkerCount = Environment.ProcessorCount * int.Parse(Configuration["Hangfire:ProcessorCount"]), ServerName = Configuration["Hangfire:ServerName"], SchedulePollingInterval = TimeSpan.FromSeconds(1), //计划轮询间隔 支持任务到秒 }; app.UseHangfireServer(jobOptions); }
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { app.UseExceptionHandler("/Error"); } app.GetServiceProvider(); app.UseSession(); //静态文件 app.UseStaticFiles(); //认证 app.UseAuthentication(); //路由 app.UseRouting(); //授权 app.UseAuthorization(); //使用HangFire自动化任务调度 var hangJobOption = new BackgroundJobServerOptions() { //服务器名字 ServerName = Environment.MachineName, //最大并行数 WorkerCount = 3, //执行任务队列 Queues = new string[] { "default", "api" } }; app.UseHangfireServer(hangJobOption); //设置HangFire控制面板权限验证 var hangJobAuth = new BasicAuthAuthorizationFilter( new BasicAuthAuthorizationFilterOptions { //加密重定向 SslRedirect = false, //需要Ssl Https RequireSsl = false, //忽略大小写 LoginCaseSensitive = false, Users = new[] { //配置账号密码 new BasicAuthAuthorizationUser { Login = "******", Password = Encoding.UTF8.GetBytes("CommonSystem"), PasswordClear = "CommonSystem" } } } ); //改变原本访问后台任务路径 app.UseHangfireDashboard("/TaskManager", new DashboardOptions { Authorization = new[] { hangJobAuth } }); app.UseEndpoints(endpoints => { endpoints.MapControllerRoute(name: "Default", pattern: "{Controller=Home}/{Action=Index}/{id?}"); endpoints.MapRazorPages(); }); #warning 待添加 //记录访问 记录Middleware app.UseMiddleware <VisitMiddleWare>(); //初始化数据库及初始数据 Task.Run(async() => { using (var scope = app.ApplicationServices.CreateScope()) { var meuns = MeunHelper.GetMeunes(); var dbservice = scope.ServiceProvider.GetService <IDatabaseInitService>(); await dbservice.InitAsync(meuns); } }); //添加一个每天自动在凌晨的时候执行的统计任务 待完善 //RecurringJob.AddOrUpdate<ISiteViewService>(x => x.AddOrUpdate(), Cron.Daily()); //RecurringJob.AddOrUpdate<Test>(n=>n.TestConsoleStr(DateTime.Now.ToString()), Cron.Minutely()); }
/// <summary> /// This method gets called by the runtime. Use this method to configure the HTTP request pipeline. /// </summary> /// <param name="app"></param> /// <param name="env"></param> public void Configure(IApplicationBuilder app, IWebHostEnvironment env, IOptions <SenparcSetting> senparcSetting, IOptions <SenparcWeixinSetting> senparcWeixinSetting) { // 记录请求与返回数据 (注意开启权限,不然本地无法写入) app.UseReuestResponseLog(); // 记录ip请求 (注意开启权限,不然本地无法写入) app.UseIpLogMildd(); // signalr app.UseSignalRSendMildd(); //强制显示中文 //System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("zh-CN"); var supportedCultures = new[] { new System.Globalization.CultureInfo("zh-CN"), //new CultureInfo("en-US") }; app.UseRequestLocalization(new RequestLocalizationOptions { DefaultRequestCulture = new RequestCulture("zh-CN"), SupportedCultures = supportedCultures, SupportedUICultures = supportedCultures, RequestCultureProviders = new List <IRequestCultureProvider> { new QueryStringRequestCultureProvider(), new CookieRequestCultureProvider(), new AcceptLanguageHeaderRequestCultureProvider() } }); #region Hangfire定时任务 var queues = new string[] { [email protected](), GlobalEnumVars.HangFireQueuesConfig.apis.ToString(), GlobalEnumVars.HangFireQueuesConfig.web.ToString(), GlobalEnumVars.HangFireQueuesConfig.recurring.ToString() }; app.UseHangfireServer(new BackgroundJobServerOptions { ServerTimeout = TimeSpan.FromMinutes(4), SchedulePollingInterval = TimeSpan.FromSeconds(15), //秒级任务需要配置短点,一般任务可以配置默认时间,默认15秒 ShutdownTimeout = TimeSpan.FromMinutes(30), //超时时间 Queues = queues, //队列 WorkerCount = Math.Max(Environment.ProcessorCount, 20) //工作线程数,当前允许的最大线程,默认20 }); //授权 var filter = new BasicAuthAuthorizationFilter( new BasicAuthAuthorizationFilterOptions { SslRedirect = false, // Require secure connection for dashboard RequireSsl = false, // Case sensitive login checking LoginCaseSensitive = false, // Users Users = new[] { new BasicAuthAuthorizationUser { Login = AppSettingsHelper.GetContent("HangFire", "Login"), PasswordClear = AppSettingsHelper.GetContent("HangFire", "PassWord") } } }); var options = new DashboardOptions { AppPath = "/", //返回时跳转的地址 DisplayStorageConnectionString = false, //是否显示数据库连接信息 Authorization = new[] { filter }, IsReadOnlyFunc = Context => { return(false);//是否只读面板 } }; app.UseHangfireDashboard("/job", options); //可以改变Dashboard的url HangfireDispose.HangfireService(); #endregion app.UseSwagger().UseSwaggerUI(c => { //根据版本名称倒序 遍历展示 typeof(CustomApiVersion.ApiVersions).GetEnumNames().OrderByDescending(e => e).ToList().ForEach( version => { c.SwaggerEndpoint($"/swagger/{version}/swagger.json", $"Doc {version}"); }); c.RoutePrefix = "doc"; }); //使用 Session app.UseSession(); if (env.IsDevelopment()) { // 在开发环境中,使用异常页面,这样可以暴露错误堆栈信息,所以不要放在生产环境。 app.UseDeveloperExceptionPage(); } else { app.UseExceptionHandler("/Home/Error"); // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts. app.UseHsts(); } //配置跨域(CORS) app.UseCors("cors"); // 使用cookie app.UseCookiePolicy(); // 返回错误码 app.UseStatusCodePages(); // Routing app.UseRouting(); // 启动 CO2NET 全局注册,必须! app.UseSenparcGlobal(env, senparcSetting.Value, globalRegister => { }, true) .UseSenparcWeixin(senparcWeixinSetting.Value, weixinRegister => { weixinRegister.RegisterMpAccount(senparcWeixinSetting.Value, "公众号") .RegisterWxOpenAccount(senparcWeixinSetting.Value, "程序"); }); //使用 公众号 MessageHandler 中间件 app.UseMessageHandlerForMp("/WeixinAsync", CustomMessageHandler.GenerateMessageHandler, options => { options.AccountSettingFunc = context => senparcWeixinSetting.Value; //对 MessageHandler 内异步方法未提供重写时,调用同步方法(按需) options.DefaultMessageHandlerAsyncEvent = DefaultMessageHandlerAsyncEvent.SelfSynicMethod; }); //使用 小程序 MessageHandler 中间件 app.UseMessageHandlerForWxOpen("/WxOpenAsync", CustomWxOpenMessageHandler.GenerateMessageHandler, options => { options.DefaultMessageHandlerAsyncEvent = DefaultMessageHandlerAsyncEvent.SelfSynicMethod; options.AccountSettingFunc = context => senparcWeixinSetting.Value; }); // 跳转https //app.UseHttpsRedirection(); // 使用静态文件 app.UseStaticFiles(); // 先开启认证 app.UseAuthentication(); // 然后是授权中间件 app.UseAuthorization(); app.UseEndpoints(endpoints => { endpoints.MapControllerRoute( "areas", "{area:exists}/{controller=Default}/{action=Index}/{id?}" ); endpoints.MapControllerRoute( "default", "{controller=Home}/{action=Index}/{id?}"); }); //设置默认起始页(如default.html) //此处的路径是相对于wwwroot文件夹的相对路径 //var defaultFilesOptions = new DefaultFilesOptions(); //defaultFilesOptions.DefaultFileNames.Clear(); //defaultFilesOptions.DefaultFileNames.Add("index.html"); //app.UseDefaultFiles(defaultFilesOptions); //app.UseStaticFiles(); }