当前位置: 首页 > news >正文

jsp mysql开发网站开发江苏省建设厅网站查询施工员证

jsp mysql开发网站开发,江苏省建设厅网站查询施工员证,做网站简单还是写程序,企业网页“我喜欢编写身份验证和授权代码。” 〜从来没有Java开发人员。 厌倦了一次又一次地建立相同的登录屏幕#xff1f; 尝试使用Okta API进行托管身份验证#xff0c;授权和多因素身份验证。 如果您要处理大量流数据#xff0c;反应式应用程序可让您更好地扩展。 它们是非阻塞… “我喜欢编写身份验证和授权代码。” 〜从来没有Java开发人员。 厌倦了一次又一次地建立相同的登录屏幕 尝试使用Okta API进行托管身份验证授权和多因素身份验证。 如果您要处理大量流数据反应式应用程序可让您更好地扩展。 它们是非阻塞的并且往往效率更高因为它们在等待发生事情时不会占用处理能力。 反应系统包含异步I / O。 异步I / O背后的概念很简单通过回收本来会在等待I / O活动时处于空闲状态的资源来缓解资源利用效率低下的问题。 异步I / O颠倒了I / O处理的常规设计向客户端通知新数据而不是请求新数据 这使客户可以在等待时做其他事情。 如果要构建反应式应用程序则需要它一直到整个数据库都是反应式的。 将阻塞的JDBC驱动程序与Spring WebFlux一起使用您会对其性能感到失望。 使用反应性NoSQL数据库例如CassandraMongoDBCouchbase和Redis其性能将给您留下深刻的印象。 在本教程中您将学习如何使用Spring BootSpring WebFlux和Spring Data创建与NoSQL数据库后端在本例中为MongoDB通信的反应式Web服务。 我只是对你说了几句。 让我们越过它们。 如果您已经了解NoSQL和Reactive编程并且只想看一些代码请随时跳过前两部分并从“构建Spring Boot资源服务器”开始。 注意本系列的第一部分演示了如何将Spring Boot和Spring Data与关系数据库PostgreSQL一起使用。 您可以在此处查看该帖子。 什么是NoSQL为什么使用MongoDB NoSQL是任何非关系数据库的术语。 在关系数据库例如SQLMySQL等中数据存储在具有强类型且表列之间关系明确的表中。 关系数据库的紧密定义明确的结构既是优点也是缺点。 这是一个权衡。 NoSQL数据库使该模型爆炸式增长并提供了其他模型这些模型可提供更大的灵活性并易于扩展。 扩展的微服务/集群模型为关系数据库带来了很多问题。 它们不是为在多台计算机上运行和保持同步而设计的。 开发NoSQL数据库部分是为了解决此问题。 通常它们是在考虑群集和水平缩放的情况下构建的。 为了以另一种方式展示这种方式通常是使用SQL数据库如果需要更多功能则必须调整数据库运行所在的服务器的大小。 它几乎是单片的并且即使当今有现代的虚拟服务器功能也很难动态地做到这一点。 在Internet规模上更好的模型是拥有一个灵活的数据库集群它们可以在数据库之间自动同步并允许您根据需求增加实例并在需求减少时减少实例。 这意味着增加功率并不需要更昂贵的机器。 您可以根据需要简单地添加更多相对便宜的计算机。 NoSQL数据库的另一个潜在好处是它们的灵活性。 像MongoDB这样的基于文档的NoSQL数据库可以在文档中存储任意数据。 可以将字段动态添加到存储的文档中而无需增加表迁移的开销。 当然这并不能解决版本控制的问题仍然取决于应用程序来处理不断变化的数据结构并不总是琐碎的但是至少您并没有与数据库打架。 综上所述请记住SQL /关系数据库不会走到任何地方。 它们经过验证快速且超级可靠。 在某些情况下它们更便宜更容易。 例如对于简单的网站或博客MySQL很难被击败。 但是即使在企业环境中 有时您也想要关系数据库强制执行的结构。 如果您有一个相当静态的数据模型并且不需要扩展到Internet规模则SQL可能是最佳选择。 这些类型的设计注意事项在您深入数据库选择之前值得深思因为它是新的且浮华的。 我在本教程中使用的是MongoDB因为一开始它很容易。 如果您使用Spring Data MongoDB它甚至更容易 积极反应 反应性是另一种行话。 感觉就像人们喜欢在聚会和会议上随意表达的那种字眼只是含糊其词。 就像“存在的”或“ ennui”。 让我们定义它。 如果您看一下Spring WebFlux文档 他们会很好地概述什么是反应性 。 术语“反应性”是指围绕响应变化而构建的编程模型-网络组件响应I / O事件UI控制器响应鼠标事件等。 从这个意义上说非阻塞是反应性的因为随着操作完成或数据可用我们现在处于响应通知的模式而不是被阻塞。 因此反应式意味着非阻塞异步且以流处理为中心。 构建一个Spring Boot资源服务器 从GitHub仓库克隆启动项目并检出start分支 git clone -b start https://github.com/oktadeveloper/okta-spring-boot-mongo-webflux-example.git 入门项目是一个简单的Spring Boot入门项目在build.gradle文件中已经具有必需的依赖build.gradle 。 让我们快速看一下相关性 compile(org.springframework.boot:spring-boot-starter-webflux) compile(org.springframework.boot:spring-boot-starter-data-mongodb-reactive) compileOnly(org.projectlombok:lombok) compile(de.flapdoodle.embed:de.flapdoodle.embed.mongo) 第一个是针对Spring WebFluxSpring MVC的响应版本。 第二个引入了Spring需要的反应性MongoDB依赖关系。 第三个是名为Lombok的项目该项目使我们免于在Java代码中键入一堆构造函数getter和setter您可以在其网页上查看该项目。 最后一个依赖项是嵌入式的内存MongoDB数据库。 这个数据库非常适合测试像这样的简单教程并且不持久。 可以使用简单的Gradle命令运行该应用程序 ./gradlew bootRun 当然如果您此时运行该应用程序则不会做太多事情。 Spring Boot将加载但是还没有定义任何控制器资源或存储库因此没有太多事情发生。 为MongoDB定义模型类 为了清楚起见本教程将与我之前提到的本系列的第一部分并行。 您将要构建一个存储皮划艇类型的简单服务器。 我总是建议首先定义数据结构来开始任何项目。 在com.okta.springbootmongo包中创建一个Kayak.java类文件 package com.okta.springbootmongo; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import org.springframework.data.mongodb.core.mapping.Document; Document Data AllArgsConstructor NoArgsConstructor public class Kayak { private String name; private String owner; private Number value; private String makeModel; } Document注释与Entity的NoSQL等效。 它告诉Spring Boot此类正在定义数据模型。 在NoSQL世界中这意味着创建文档而不是表条目。 其他三个注释是Lombok帮助器它们自动生成gettersetter和构造函数。 皮划艇文档具有五个属性名称所有者值和类型。 这些会自动映射到MongoDB的适当BSON类型。 什么是BSON类型 看看有关该主题的MongoDB文档 。 它们是用于将数据保留在MongoDB文档中的二进制序列化类型。 它们定义了可以存储在MongoDB数据库中的原始类型。 将ReactiveMongoRepository添加到您的Spring Boot应用程序 使用Document批注定义Kayak类可以使Spring Boot知道数据的结构但实际上并没有提供任何从数据库保存或加载数据的方法。 为此您需要定义一个存储库。 这样做的代码非常简单。 在com.okta.springbootmongo包中创建一个KayakRepository.java类文件 package com.okta.springbootmongo; import org.springframework.data.mongodb.repository.ReactiveMongoRepository; public interface KayakRepository extends ReactiveMongoRepositoryKayak, Long { } 实际上这为您提供了从数据库创建更新读取和删除文档所需的所有基本方法。 要了解操作方法请深入研究ReactiveMongoRepository类和其他各种超类尤其是ReactiveCrudRepository 。 查看ReactiveCrudRepository 的文档以查看已实现的方法。 ReactiveCrudRepository实际上提供了一组基本而完整的CRUD方法。 ReactiveMongoRepository在此基础上构建以提供一些特定于MongoDB的查询功能。 使用Spring WebFlux实现控制器 添加存储库后您有足够的能力以编程方式处理数据。 但是没有定义Web端点。 在前面的教程中添加REST端点这是需要的所有是对加RepositoryRestResource注释到KayakRepository类。 这通过所有CRUD方法为我们自动生成了功能齐全的REST资源。 但是此快捷方式不适用于Spring WebFlux。 必须明确定义任何公共Web终结点。 添加以下KayakController.java类 package com.okta.springbootmongo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.*; import reactor.core.publisher.Flux; Controller RequestMapping(path /kayaks) public class KayakController { private KayakRepository kayakRepository; public KayakController(KayakRepository kayakRepository) {this.kayakRepository kayakRepository;}PostMapping() public ResponseBody MonoKayak addKayak(RequestBody Kayak kayak) { return kayakRepository.save(kayak); } GetMapping() public ResponseBody FluxKayak getAllKayaks() { return kayakRepository.findAll(); } } 该控制器添加了两个端点 POST /kayaks增加了新的皮划艇 GET /kayaks列出所有皮划艇 您还将注意到该类使用Spring依赖项注入将KayakRepository实例自动KayakRepository到控制器中并且您将看到如何使用存储库持久化Kayak域类。 此类看起来非常像关系的阻止的版本。 许多幕后工作使这种情况成为现实。 不用担心但是这是100无反应的非阻塞代码。 测试您的Spring Boot服务器 至此您已经可以完全运行皮划艇REST资源服务器。 在测试之前请将以下方法添加到MainApplication类。 只需在应用程序加载时将一些测试数据注入数据库。 Bean ApplicationRunner init(KayakRepository repository) { Object[][] data { {sea, Andrew, 300.12, NDK}, {creek, Andrew, 100.75, Piranha}, {loaner, Andrew, 75, Necky} }; return args - { repository .deleteAll() .thenMany( Flux .just(data) .map(array - { return new Kayak((String) array[0], (String) array[1], (Number) array[2], (String) array[3]); }) .flatMap(repository::save) ) .thenMany(repository.findAll()) .subscribe(kayak - System.out.println(saving kayak.toString()));}; } HTTPie是一个很棒的命令行实用工具它使对资源服务器的请求运行变得容易。 如果未安装HTTPie请使用brew install httpie进行brew install httpie 。 或前往他们的网站并实现它。 或者只是跟随。 确保您的Spring Boot应用正在运行。 如果不是请使用./gradlew bootRun启动它。 针对您的资源服务器运行GET请求 http :8080/kayaks 这是http GET http://localhost:8080/kayaks简写。 您会得到 HTTP/1.1 200 OK Content-Type: application/json;charsetUTF-8 transfer-encoding: chunked [{makeModel: NDK,name: sea,owner: Andrew,value: 300.12},{makeModel: Piranha,name: creek,owner: Andrew,value: 100.75},{makeModel: Necky,name: loaner,owner: Andrew,value: 75} ] 现在尝试将新的皮划艇过帐到服务器。 http POST :8080/kayaks namesea2 ownerAndrew value500 makeModelPH 您应该看到 HTTP/1.1 200 OK Content-Length: 62 Content-Type: application/json;charsetUTF-8 {makeModel: PH,name: sea2,owner: Andrew,value: 500 } 如果您重复GET请求http :8080/kayaks 您将在列表中看到新的皮划艇 设置安全认证 现在您需要集成Okta for OAuth 2.0并将基于令牌的身份验证添加到资源服务器。 本部分与本教程第1部分中的部分完全相同因此如果您已完成此操作则只需要您的客户ID就可以跳至下一部分。 如果尚未注册请访问developer.okta.com并注册一个免费帐户。 拥有帐户后通过单击“ 应用程序”顶部菜单项然后单击“ 添加应用程序”按钮打开开发人员仪表板并创建OpenID ConnectOIDC应用程序 。 选择单页应用程序 。 默认应用程序设置很好除了您需要添加登录重定向URI https://oidcdebugger.com/debug : https://oidcdebugger.com/debug 。 您将在稍后使用它来检索测试令牌。 注意 如果要实现像Angular或React这样的前端则可能需要根据所使用的平台来更新默认的登录重定向URI。 由于本教程仅创建没有前端的资源服务器因此暂时不重要。 我们所有的资源服务器将要做的就是使用授权服务器验证JSON Web令牌而无需重定向。 另外请注意您的客户ID 稍后您将需要它。 配置您的Spring Boot服务器以进行令牌认证 现在您需要更新一些项目文件以为OAuth 2.0配置Spring Boot。 将以下依赖项添加到您的build.gradle文件中 dependencies {...compile(com.okta.spring:okta-spring-boot-starter:1.1.0)... } 创建一个名为src/main/resources/application.yml的新配置文件 okta:oauth2:issuer: https://{yourOktaDomain}/oauth2/defaultgroupsClaim: groupsclientId: {yourClientId} 在com.okta.springbootmongo包中创建一个SecurityConfiguration.java类 package com.okta.springbootmongo;import org.springframework.context.annotation.Bean; import org.springframework.security.config.annotation.web.reactive.EnableWebFluxSecurity; import org.springframework.security.config.web.server.ServerHttpSecurity; import org.springframework.security.web.server.SecurityWebFilterChain;EnableWebFluxSecurity public class SecurityConfiguration {Beanpublic SecurityWebFilterChain securityWebFilterChain(ServerHttpSecurity http) {http.authorizeExchange().anyExchange().authenticated().and().oauth2ResourceServer().jwt();return http.build();} }测试您的受保护服务器 停止您的Spring Boot服务器并使用以下./gradlew bootRun重新启动它 ./gradlew bootRun 从命令行运行一个简单的GET请求。 http :8080/kayaks 您会得到未经授权的401 /。 HTTP/1.1 401 Unauthorized Cache-Control: no-store Content-Type: application/json;charsetUTF-8生成访问令牌 要立即访问服务器您需要一个有效的访问令牌。 您可以使用OpenID Connect调试器来帮助您完成此任务。 在另一个窗口中打开oidcdebugger.com 。 授权URI https://{yourOktaDomain} /oauth2/default/v1/authorize 重定向URI 不变。 这是您在上面的OIDC应用程序中添加的值。 客户ID 来自您刚创建的OIDC应用程序。 范围 openid profile email 。 状态 您要通过OAuth重定向过程传递的任何值。 我将其设置为{} 。 Nonce 可以一个人呆着。 Nonce表示“编号已使用一次”是一种简单的安全措施用于防止同一请求被多次使用。 响应类型 token 。 响应方式 form_post 。 点击发送请求 。 如果您尚未登录developer.okta.com则需要登录。如果可能的话已经登录则将为您的登录身份生成令牌。 使用您的访问令牌 您可以通过在Bearer类型的Authorization请求标头中包含令牌来使用令牌。 将令牌存储在shell变量中 TOKENeyJraWQiOiJldjFpay1DS3UzYjJXS3QzSVl1MlJZc3VJSzBBYUl3NkU4SDJfNVJr... 然后使用HTTPie发出GET请求 http :8080/kayaks Authorization: Bearer $TOKEN 请注意上面的双引号。 单引号不起作用因为shell变量未扩展。 添加基于组的授权 现在您将通过添加基于组成员身份来控制对特定控制器端点的访问的功能来使授权方案更加完善。 要在Okta中使用基于组的授权您需要在访问令牌中添加一个“组”声明。 创建一个Admin组“ 用户” “ 组” “ 添加组” 并将您的用户添加到其中。 您可以使用注册时使用的帐户也可以创建一个新用户“ 用户” “ 添加人” 。 导航到“ API” “ 授权服务器” 单击“ 授权服务器”选项卡然后编辑默认选项卡。 点击索赔标签然后添加索赔 。 将其命名为“组”并将其包含在访问令牌中。 将值类型设置为“ Groups”并将过滤器设置为.*的正则表达式。 组声明包含用户分配到的组。 您用来登录developer.okta.com网站的默认用户也将是“所有人”组和“管理员”组的成员。 还需要更新SecurityConfiguration类以使用基于组的授权。 更新Java文件以匹配以下内容 package com.okta.springbootmongo;import org.springframework.context.annotation.Bean; import org.springframework.http.HttpMethod; import org.springframework.security.config.annotation.method.configuration.EnableReactiveMethodSecurity; import org.springframework.security.config.annotation.web.reactive.EnableWebFluxSecurity; import org.springframework.security.config.web.server.ServerHttpSecurity; import org.springframework.security.web.server.SecurityWebFilterChain;EnableWebFluxSecurity EnableReactiveMethodSecurity public class SecurityConfiguration {Beanpublic SecurityWebFilterChain securityWebFilterChain(ServerHttpSecurity http) {http.authorizeExchange().pathMatchers(HttpMethod.POST, /kayaks/**).hasAuthority(Admin).anyExchange().authenticated().and().oauth2ResourceServer().jwt();return http.build();} } 用简单的英语来说这告诉Spring Boot要求对/kayak端点的任何POST都具有组成员身份Admin 对于所有其他请求仅需要有效的JWT。 您的基于组的授权策略由以下两行定义 .pathMatchers(HttpMethod.POST, /kayaks/**).hasAuthority(Admin) .anyExchange().authenticated() 有关更多信息请参阅ServerHttpSecurity类的文档 。 您可能想知道为什么它说hasAuthority()而不是hasRole()或hasGroup() 。 这是因为授权是Spring调用服务器发送的文本字符串以表示权限成员身份的方式无论是角色还是组。 hasRole()假定角色采用特定格式“ ROLE_ADMIN”。 可以重写此方法但是hasAuthority()是直接使用授权字符串的简单方法。 没有hasGroup()方法因为前两个示例如果未明确说明涵盖了该用例。 创建一个非管理员用户 要测试基于组的授权方案您需要一个不是管理员的用户。 转到developer.okta.com仪表板。 从顶部菜单中选择“ 用户” “ 人员” 。 单击添加人按钮。 给用户一个名字 姓氏和用户名 也将是主要电子邮件 。 值无关紧要并且您将不必检查电子邮件。 您只需要知道电子邮件地址/用户名和密码即可在一分钟内登录Okta。 密码 将下拉菜单更改为“ 由管理员设置” 。 为用户分配密码。 点击保存 。 您刚刚创建的用户不是Admin组的成员而是默认组Everyone的成员。 基于测试组的授权 注销您的Okta开发人员仪表板。 返回OIDC调试器并生成一个新令牌。 这次以新的非管理员用户身份登录。 系统会要求您选择一个安全问题然后将您重定向到https://oidcdebugger.com/debug页面您可以在其中复制令牌。 如果愿意可以转到jsonwebtoken.io并解码新令牌。 在有效内容中 子声明将显示用户的电子邮件/用户名而组声明将仅显示“ 所有人”组。 {sub: testgmail.com,groups: [Everyone] } 根据许可方案该用户应该能够列出所有皮划艇但不能添加新的皮划艇。 请记住将令牌存储在shell脚本中如下所示 TOKENeyJraWQiOiI4UlE5REJGVUJOTnJER0VGaEExekd6bWJqREpSYTRTT1lhaGpsM3d4... 发出GET请求以列出所有皮划艇 http :8080/kayaks Authorization: Bearer $TOKENHTTP/1.1 200 OK Cache-Control: no-cache, no-store, max-age0, must-revalidate Content-Type: application/json;charsetUTF-8 ...[{makeModel: NDK,name: sea,owner: Andrew,value: 300.12},{makeModel: Necky,name: loaner,owner: Andrew,value: 75},{makeModel: Piranha,name: creek,owner: Andrew,value: 100.75} ] 尝试使用非管理员用户令牌添加新的皮划艇 http POST :8080/kayaks Authorization: Bearer $TOKEN namesea2 ownerAndrew value500 makeModelPH 您将被拒绝 HTTP/1.1 403 Forbidden Cache-Control: no-cache, no-store, max-age0, must-revalidate Expires: 0 ... 现在注销developer.okta.com并使用OIDC Debugger生成一个新令牌。 这次使用您原来的管理员帐户重新登录。 将新令牌存储在shell变量TOKEN 。 运行POST请求 http POST :8080/kayaks Authorization: Bearer $TOKEN namesea2 ownerAndrew value500 makeModelPH AM HTTP/1.1 200 OK Cache-Control: no-cache, no-store, max-age0, must-revalidate ... {makeModel: PH,name: sea2,owner: Andrew,value: 500 }一切顺利已通过身份验证 而已 在本教程中您使用Spring WebFlux创建了一个Spring Boot应用程序使用嵌入式MongoDB数据库来持久化模型类并向其中添加了资源服务器。 之后我向您展示了如何使用Okta和OAuth 2.0添加JWT令牌身份验证。 最后您了解了如何使用Okta和Spring Security将基于组的授权添加到控制器中的特定端点。 如果您想查看这个完整的项目可以在oktadeveloper / okta-spring-boot-mongo-webflux-example上的GitHub上找到该仓库 。 如果还没有请查看本系列的第1部分 使用PostgreSQL使用Spring Boot和JPA构建基本应用程序 。 它是同一个应用程序但是使用了更传统的关系数据库和Spring MVC样式的阻止Web服务器。 了解有关Spring BootMongoDB和安全用户管理的更多信息 如果您想了解有关Spring BootSpring Security或Okta的更多信息请查看以下任何出色的教程 使用Spring WebFlux构建反应性API Spring BootOAuth 2.0和Okta入门 15分钟内将单一登录添加到您的Spring Boot Web App 使用多重身份验证保护您的Spring Boot应用程序安全 使用Spring Boot和GraphQL构建安全的API 以下是一些来自Spring的优秀资源 对Spring Data做出反应 OAuth2 WebFlux文档 构建反应式RESTful Web服务 Spring WebFlux文档 如果您喜欢这篇文章您可能会喜欢我们发布的其他文章。 在Twitter上关注oktadev 并订阅我们的YouTube频道以获取更多有趣的教程。 “使用Spring Boot和MongoDB构建反应性应用程序”最初于2019年2月21日发布在Okta开发人员博客上。 “我喜欢编写身份验证和授权代码。” 〜从来没有Java开发人员。 厌倦了一次又一次地建立相同的登录屏幕 尝试使用Okta API进行托管身份验证授权和多因素身份验证。 翻译自: https://www.javacodegeeks.com/2019/03/build-reactive-app-spring-boot-mongodb.html
http://www.zqtcl.cn/news/858262/

相关文章:

  • 奇信建设集团官方网站专题网站建站
  • 站点推广策略包括黄山旅游必去十大景点
  • 佛山龙江做网站的信宜做网站
  • 推广自己的网站需要怎么做wordpress 正计时
  • 做网站工资怎么样织梦的官方网站
  • python制作视频网站开发互动网站建设公司
  • 网站软文代写广西网站设计公司排行榜
  • c2c网站代表和网址mirages WordPress
  • 网站建设开发案例教程wordpress中国区官方论坛
  • 王晴儿网站建设做啊录音网站
  • 网站开发版本号正规的企业网站建设公司
  • 中国做网站正邦温州网站建设方案服务
  • 南通网站关键词优化wordpress做小程序
  • 上海企业网站seo多少钱做网站图片链接到天猫
  • 属于教育主管部门建设的专题资源网站是广西壮锦网站建设策划书
  • 云南网站制作一条龙网站建设公司对比分析报告
  • 手机网站客户端网站语言有几种
  • 做网站怎么选取关键词中企动力销售陪酒多吗
  • 新网站做内链雅虎网站收录提交入口
  • 简述建设一个网站的具体过程接做名片的网站
  • 怎样建立自己网站网站产品数据如何恢复
  • 用wordpress建立电商网站用Off做网站
  • 网站建设公司不赚钱ui设计软件培训学校
  • 网站项目策划书模板wordpress修改模版
  • 房地产手机网站模板电脑建立网站
  • 网站自适应手机代码网络服务机构的网站
  • 系统网站重庆智能建站模板
  • wordpress适合优化吗宝塔 wordpress优化
  • 怎么利用网站做外链接怎样做公司网站介绍
  • 广州网站优化渠道木门网站模板