ASP.NET Core5.0 WebApi和BlazorWebAssembly 博客后台管理系统(jwt登录校验)

2023-05-16

ASP.NET Core5.0 WebApi和BlazorWebAssembly 博客后台管理系统

1,此项目是VS2019,Asp.NetCore5.0,用到Blazor,样式用到了bootstrap,数据库用到的MySQL数据库
项目实例图片,文章后面会**附上项目地址 下载地址

webapi端截图
WebApi端
Blazor Wasm端截图在这里插入图片描述在这里插入图片描述
2,项目结构和部分代码下(代码较多只粘贴部分,文章最后提供项目下载地址在这里插入代码片
在这里插入图片描述
2.1 webapi端

 public void ConfigureServices(IServiceCollection services)
        {
            services.AddControllers();
            //连接sqlite
            //services.AddDbContext<MyBlogDbContext>(
            //   options =>
            //   {
            //       options.UseSqlite(@"Data Source=BlzaorApiBlog.db");
            //   });
            //添加app 连接mysql
            services.AddDbContext<MyBlogDbContext>(option =>
            {
                option.UseMySql(Configuration["SqlConn"], MySqlServerVersion.LatestSupportedServerVersion);
            });
            //注入服务
            services.AddScoped<IBlogModesServices, BlogModesServices>();
            services.AddScoped<IBlogTypesServices, BlogTypesServices>();
            services.AddScoped<IWriterInfoServices, WriterInfoServices>();
            services.AddSwaggerGen(c =>
            {
                c.SwaggerDoc("v1", new OpenApiInfo { Title = "Blog.Api", Version = "v1" });
                #region Swagger想要使用鉴权需要注册服务的时候添加以下代码
                c.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme
                {
                    In = ParameterLocation.Header,
                    Type = SecuritySchemeType.ApiKey,
                    Description = "直接在下框中输入Bearer {token}(注意两者之间是一个空格)",
                    Name = "Authorization",
                    BearerFormat = "JWT",
                    Scheme = "Bearer"
                });
                c.AddSecurityRequirement(new OpenApiSecurityRequirement
                {
                  {
                    new OpenApiSecurityScheme
                    {
                      Reference=new OpenApiReference
                      {
                        Type=ReferenceType.SecurityScheme,
                        Id="Bearer"
                      }
                    },
                    new string[] {}
                  }
                });
                #endregion
            });

            #region 注入jwt
            services.AddCustomJWT();
            #endregion

            #region 注入AutoMapper
            object p = services.AddAutoMapper(typeof(CustomAutoMapperProfile));
            #endregion

            #region 配置跨域请求

            services.AddCors(options =>
            {
                options.AddPolicy("any", builder =>
                {
                    builder.SetIsOriginAllowed(_ => true)
                    .AllowAnyOrigin() //允许任何来源的主机访问
                    .AllowAnyHeader()
                    .AllowAnyMethod(); 
                });
            });

            #endregion

        }

2.2,Wasm端

public static async Task Main(string[] args)
        {
            var builder = WebAssemblyHostBuilder.CreateDefault(args);
            builder.RootComponents.Add<App>("#app");

            //builder.Services.AddScoped(sp => new HttpClient
            //{
            //    //BaseAddress = new Uri(builder.HostEnvironment.BaseAddress)
            //    BaseAddress = new Uri("https://localhost:5001")
            //});

            builder.Services.AddHttpClient<IBlogModeServices, BlogModeServices>
               (client => client.BaseAddress = new Uri("https://localhost:6001"));

            builder.Services.AddHttpClient<IBlogTypeServices, BlogTypeServices>
              (client => client.BaseAddress = new Uri("https://localhost:6001"));

            builder.Services.AddHttpClient<IWriteInfoServices, WriteInfoServices>
              (client => client.BaseAddress = new Uri("https://localhost:6001"));

            builder.Services.AddBlazoredModal(); //modal框
            builder.Services.AddBlazoredLocalStorage(); //localstorage

            //builder.Services.AddAuthorizationCore(); //授权
            var host = builder.Build();
            await host.RunAsync();
        }

2.3 jwt 校验

[Route("api/[controller]")]
    [ApiController]
    public class AuthorizationController : ControllerBase
    {
        private readonly IWriterInfoServices _IwriterInfoSerive;
        public AuthorizationController(IWriterInfoServices iwriterInfoSerive)
        {
            _IwriterInfoSerive = iwriterInfoSerive;
        }

        [Produces("application/json")]
        [HttpPost("Login")]
        public async Task<ApiResult> Login([FromBody] WriterInfo DTouser)
        {
            //Console.WriteLine("dtouser:" + DTouser);
            //加密后的密码  
            //string pwd = DTouser.UserPwd;
            string pwd = MD5Helper.GenerateMD5(DTouser.UserPwd);
            string useraccount = DTouser.UserAccount;
            //数据校验
            var writer = await _IwriterInfoSerive.FindAsync(useraccount, pwd);
            if (writer != null)
            {
                //.登陆成功
                var claims = new Claim[]
                     {
                         //不能发敏感信息
                          //new Claim(ClaimTypes.Name, "张三")
                          new Claim("UserAccount", writer.UserAccount),
                          new Claim ("Id",writer.Id.ToString()),
                          new Claim ("UserName",writer.UserName)
                      };                                                 //密钥
                var key = new SymmetricSecurityKey(
                    Encoding.UTF8.GetBytes("SDMC-CJAS1-SAD-DFSFA-SADHJVF-VF"));
                //issuer代表颁发Token的Web应用程序,audience是Token的受理者
                var token = new JwtSecurityToken(
                    issuer: "http://localhost:5000", //=jwt发布者
                    audience: "http://localhost:6000", //=api使用者
                    claims: claims,
                    notBefore: DateTime.Now,
                    expires: DateTime.Now.AddHours(1),
                    signingCredentials: new SigningCredentials(key, SecurityAlgorithms.HmacSha256)
                );
                var jwtToken = new JwtSecurityTokenHandler().WriteToken(token);
                // return jwtToken;
                return ApiResultHelper.Success(jwtToken);
            }
            return ApiResultHelper.Error("登录失败-账号密码错误");
        }
    }

3,项目下载地址

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ASP.NET Core5.0 WebApi和BlazorWebAssembly 博客后台管理系统(jwt登录校验) 的相关文章

  • 使用Vmware虚拟机无法ping通开发板

    文章同时发布于个人博客https www shui2000 top posts 76f723b3 html 问题详细描述 嵌入式课程中 xff0c 本人使用Vmware虚拟机运行Ubuntu22 04操作系统 xff0c 无法与开发版pin
  • 深入浅析MyBatis源码

    MyBatis 1 SqlSessionFactoryBuilder 通过build方法去解析xml配置文件 通过调用XMLConfigBuilder的parse方法将配置文件封装成一个Configuration对象 Xml节点解析 封装好
  • java 无需SSL验证的HTTP请求

    实例 如果有用请给我个赞好吗 public static Map lt String Object gt doPost String url Map lt String String gt paramaters HttpPost httpR
  • Kafta原理

    消息队列通信的模式 通过上面的例子我们引出了消息中间件 xff0c 并且介绍了消息队列出现后的好处 xff0c 这里就需要介绍消息队列通信的两种模式了 xff1a 一 点对点模式 如上图所示 xff0c 点对点模式通常是基于拉取或者轮询的消
  • MapStruct简介简单应用

    1 MapStruct 是什么 xff1f 1 1 JavaBean 的困扰 对于代码中 code JavaBean code 之间的转换 xff0c 一直是困扰我很久的事情 在开发的时候我看到业务代码之间有很多的 code JavaBea
  • SpringBoot入门案例

    基础项目该包含哪些东西 Swagger在线接口文档 CodeGenerator 代码生成器 统一返回 通用的分页对象 常用工具类 全局异常拦截 错误枚举 自定义异常 多环境配置文件 Maven多环境配置 日志配置 JenkinsFile S
  • Spring事务管理机制

    一 Spring事务管理的几种方式 xff1a Spring事务在具体使用方式上可分为两大类 xff1a 1 声明式 基于 TransactionProxyFactoryBean的声明式事务管理 基于 lt tx gt 和 lt aop g
  • SpringBoot 注解大全

    一 注解 annotations 列表 1 64 SpringBootApplication 包含了 64 ComponentScan 64 Configuration和 64 EnableAutoConfiguration注解 其中 64
  • Spring 中的bean 是否线程安全

    结论 xff1a 不是线程安全的 Spring容器中的Bean是否线程安全 xff0c 容器本身并没有提供Bean的线程安全策略 xff0c 因此可以说Spring容器中的Bean本身不具备线程安全的特性 xff0c 但是具体还是要结合具体
  • SpringBoot使用PageHelper分页

    一 开发准备 1 开发工具 IntelliJ IDEA 2020 2 3 2 开发环境 Red Hat Open JDK 8u256 Apache Maven 3 6 3 3 开发依赖 SpringBoot lt dependency gt
  • Windows Server 出现多个匿名登陆用户的问题解决

    1 起因 工作中需要在同一台 windows server的机器上多个用户同时使用 xff0c 遂建立多个账号 xff0c 供大家进行使用 2 问题 一段时间后发现系统特别卡顿并会死机 xff0c 查询原因后发现 xff0c 如图所示 xf
  • java锁 synchronized的使用及原理剖析

    synchronized用法有三个 修饰实例方法 修饰静态方法 修饰代码块 1 修饰实例方法 synchronized关键词作用在方法的前面 xff0c 用来锁定方法 xff0c 其实默认锁定的是this对象 public class Th
  • 面试HashMap的原理

    一般来说 xff0c java面试必不可少的菜品 xff0c 那就是 来 xff0c 讲一下HashMap的原理 那么今天就来讲一下HashMap的原理 先说一下JDK1 7跟JDK1 8对它的改变 JDK1 7之前使用的是数组加链表 xf
  • JAVA开发环境配置

    1 自己在网上下载JDK xff0c 本教程使用JDK1 6 下载好JDK后双击运行 xff0c 然后根据提示进行安装 安装好JDK后 bin xff1a 存放java可执行文件 如 xff1a javac exe java exe等等 d
  • MyEcplise_Maven搭建SSM框架

    Maven源码 链接 xff1a https pan baidu com s 1eTQMJQy 密码 xff1a 8j1q 博文中的MyEcplise 链接 xff1a https pan baidu com s 1dEdQYa 密码 xf
  • 怎么使用Linux常用命令大全

    系统信息 arch 显示机器的处理器架构 1 uname m 显示机器的处理器架构 2 uname r 显示正在使用的内核版本 dmidecode q 显示硬件系统部件 SMBIOS DMI hdparm i dev hda 罗列一个磁盘的
  • MySQL常用语句详解

    Winfrom连接网页 第一种方法 xff1a 调用本地浏览器System Diagnostics Process Start 34 https www microsoft com zh cn 34 第二种方法 xff1a 连接 strin
  • Maven搭建SSH连接Oracle数据库

    Maven工程搭建SSH连接Oracle数据库 首先在pom xml里引入jar lt project xmlns 61 34 http maven apache org POM 4 0 0 34 xmlns xsi 61 34 http
  • MyBatis简介与运用

    1 Mybatis简介 1 1 Mybatis是什么 Mybatis是一个java的持久层框架 xff0c 保存到数据库 持久化 xff1a 保存到本地文件 1 2 Mybatis的作用 操作数据库 1 3 为什么要学习mybatis 1
  • SpringMVC入门原理

    1 Springmvc原理 1 1 什么是springmvc SpringMVC是一个Spring框架内置的对MVC模式的实现 xff0c 就spring的一个子模块 1 2 什么是mvc Model view controller 模型

随机推荐