网站开发程序/百度卖货平台

网站开发程序,百度卖货平台,网站开发公司,张家港普通网站建设朋友不允许朋友写用户身份验证。 厌倦了管理自己的用户? 立即尝试Okta的API和Java SDK。 在几分钟之内即可对任何应用程序中的用户进行身份验证,管理和保护。 身份验证对于除了最基本的Web应用程序之外的所有应用程序都至关重要。 谁在发出请求&#xf…

朋友不允许朋友写用户身份验证。 厌倦了管理自己的用户? 立即尝试Okta的API和Java SDK。 在几分钟之内即可对任何应用程序中的用户进行身份验证,管理和保护。

身份验证对于除了最基本的Web应用程序之外的所有应用程序都至关重要。 谁在发出请求,需要数据或想要更新或删除数据? 您可以确定请求来自指定的用户或代理吗? 在当今的计算机安全环境中,很难确定地回答这个问题。 幸运的是,绝对没有理由重新发明轮子。

Spring Boot和Spring Security是Web应用程序开发的强大组合。 使用相对较少的代码行,您可以实现各种身份验证系统。 这些系统由专家根据规范进行测试,更新和实施。

在本教程中,您将构建一个非常简单的Spring Boot应用程序,该应用程序从basic-auth开始,并逐步进行基于表单的身份验证,基于表单的自定义身份验证以及使用Okta作为OAuth提供者的OAuth 2.0 / OpenID Connect。 我们还将介绍SAML身份验证。 但是,Spring Security SAML实现目前正在过渡中,尚未更新为最新版本的Spring Boot。

本教程专门研究身份验证,将授权保留另一天。 身份验证可以回答问题:谁在发出请求。 授权是在身份验证之后进行的,并回答以下问题:是否允许经过身份验证的用户发出特定请求?

使用Spring Security进行身份验证的要求和假设

本教程假定您对Java和Spring Boot基本熟悉。 该项目利用了Gradle构建系统(因为我发现Groovy DSL永远比XML更可取)。 但是,您不需要安装Gradle,因为所有项目都包括Gradle包装器。

您不需要全面了解OAuth 2.0和OpenID Connect(OIDC)–令人欣慰的是,由于OAuth 2.0和OpenID Connect有时非常复杂,详细且繁琐。 我仍在努力了解它的许多方面。 但是,基本的了解会有所帮助。 如果您想更进一步,本文结尾处的一些链接可以为您提供帮助。

非常(非常)简短地讲,OAuth 2.0是开放授权(开放授权)的第二个主要版本。 来自OAuth规范委员会的信息 :“ OAuth 2.0致力于简化客户端开发人员的工作,同时为Web应用程序,桌面应用程序,移动电话和客厅设备提供特定的授权流程。” 注意两件事:1)仅是授权,因此没有身份验证; 2)这是一个规范,因此没有实现。 OIDC建立在OAuth 2.0之上,以使用定义良好的令牌添加身份层(身份验证)。

Okta的Spring Security身份验证

Okta是一家身份访问和管理公司,提供大量的软件即服务身份产品。 我们具有OAuth 2.0和OpenID Connect的实现,该实现使向Spring Boot应用程序添加单点登录(SSO)变得容易。

我们的API使您能够:

  • 验证和授权用户
  • 存储有关您的用户的数据
  • 执行基于密码的社交登录
  • 通过多因素身份验证保护您的应用程序
  • 以及更多! 查看我们的产品文档以获取更多信息

注册一个永久免费的开发者帐户 ,完成后,再回来学习更多关于使用Spring Boot和Spring Security构建身份验证的信息。

除此之外,您还需要一台计算机和一个Web浏览器。 如果没有这些,那么,你会在这里怎么样?

下载Spring Security示例应用程序

继续并从本教程的GitHub存储库下载示例应用程序。

git clone https://github.com/oktadeveloper/okta-spring-security-authentication-example.git

在项目中,您将看到三个目录:

  • basic-auth
  • form-auth
  • okta-oauth

通过Spring Security深入了解基本身份验证

到目前为止,基本身份验证是最简单的方法。 不幸的是,它是为在互联网上更简单的时间而设计的。 对于专业应用程序,它并不是真正起作用。 有时,当我需要一些简单而又快速的工具来使临时冲浪者脱离页面时,我便将其用于内部工具。 但是,基本身份验证在HTTP身份验证标头中以基本纯文本格式(base64编码)向用户发送凭据。 因此,基本身份验证应始终与SSL结合使用以保护用户凭据。 基本身份验证还使用浏览器生成的弹出面板来检索用户凭据。 面板不能设置样式或自定义。

首先,看一下build.gradle文件。

plugins {  id 'org.springframework.boot' version '2.1.5.RELEASE'  id 'java'  
}  apply plugin: 'io.spring.dependency-management'  group = 'com.okta.springsecurityauth'  
version = '0.0.1-SNAPSHOT'  
sourceCompatibility = '1.8'  repositories {  mavenCentral()  
}  dependencies {  implementation 'org.springframework.boot:spring-boot-starter-security'  implementation 'org.springframework.boot:spring-boot-starter-web'  testImplementation 'org.springframework.boot:spring-boot-starter-test'  testImplementation 'org.springframework.security:spring-security-test'  
}

此行设置Spring Boot版本:

id 'org.springframework.boot' version '2.1.5.RELEASE'

这是包括Spring Security和Spring MVC的两个依赖项。

implementation 'org.springframework.boot:spring-boot-starter-security'  
implementation 'org.springframework.boot:spring-boot-starter-web'

其余的几乎都是样板。

这是主应用程序文件( src/main/java/com/okta/springsecurityauth/Application.java )。

package com.okta.springsecurityauth;  import org.springframework.boot.SpringApplication;  
import org.springframework.boot.autoconfigure.SpringBootApplication;  @SpringBootApplication  
public class Application {  public static void main(String[] args) {  SpringApplication.run(Application.class, args);  }
}

这是Java应用程序的入口点。 要注意的主要事情是数量很少。 @SpringBootApplication注释告诉Spring引导所有Spring Boot优点。

接下来看一下WebController, src/main/java/com/okta/springsecurityauth/WebController.java

package com.okta.springsecurityauth;  import org.springframework.stereotype.Controller;  
import org.springframework.web.bind.annotation.RequestMapping;  
import org.springframework.web.bind.annotation.ResponseBody;  @Controller  
public class WebController {  @RequestMapping("/")@ResponseBodypublic String index() {return "Welcome home!";}
}

Web控制器文件还有更多操作。 这是定义项目的唯一HTTP端点的地方。 该文件定义了一个简单的home控制器,该控制器返回文本字符串。

@Controller批注告诉Spring该文件正在定义Web控制器端点。 @RequestMapping批注定义HTTP请求和控制器方法之间的映射。 @ResponseBody注释告诉Spring该方法将直接以String的形式返回请求主体,而不是返回模板文件的名称。

最后一个文件是定义所有安全性的位置。 巧妙地将其命名为SecurityConfiguration.java

看看src/main/java/com/okta/springsecurityauth/SecurityConfiguration.java

package com.okta.springsecurityauth;  import org.springframework.context.annotation.Configuration;  
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;  
import org.springframework.security.config.annotation.web.builders.HttpSecurity;  
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;  @Configuration  
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {  @Override  public void configure(HttpSecurity http) throws Exception {  http  .authorizeRequests()  .anyRequest().authenticated()  .and()  .httpBasic();  }  @Override  protected void configure(AuthenticationManagerBuilder auth) throws Exception {  auth.inMemoryAuthentication()  .withUser("user")  .password("{noop}pass") // Spring Security 5 requires specifying the password storage format  .roles("USER");  }  }

您会看到需要很少的配置。 在第一种方法中,将fluent API与HttpSecurity对象一起使用以配置Spring Security:激活安全性,对所有请求进行身份验证,并使用HTTP basic。

第二种方法实际上只是本教程的一点技巧。 它配置内存中的身份验证管理器,并创建一个凭据为user:pass

试一试吧! 在终端上,转到项目的根目录。

使用以下项目运行项目: ./gradlew bootRun

导航到http://localhost:8080

您将看到浏览器生成的登录表单。 输入凭证userpass 。 您会看到一个成功的页面,上面写着“欢迎回家!”

使用Spring Security升级到基于表单的身份验证

HTTP Basic身份验证非常简单,实际上在现实世界中并没有那么有用。 基于表单的身份验证要现实得多。 在您的IDE中打开/form-auth文件夹。

build.gradle文件是相同的。 Application.javaWebController.java文件也是如此。 唯一的重大更改是在SecurityConfiguration.java文件中(并且在此文件中,仅一行已更改)。

src/main/java/com/okta/springsecurityauth/SecurityConfiguration.java

package com.okta.springsecurityauth;  ... @Configuration  
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {  @Override  public void configure(HttpSecurity http) throws Exception {  http  .authorizeRequests()  .anyRequest().authenticated()  .and()  .formLogin();  //

See how ridiculously simple Spring is making things for us. All you had to do was change the httpBasic() fluent method to formLogin() and Spring Boot automatically generates a login form for you.

Run it using ./gradlew bootRun .

You’ll see the auto-generated Spring Boot login form.

但是,如果您想样式化自己的自定义表单而不是使用Spring生成的表单,该怎么办? 没有太多的工作了。

首先,将Thymeleaf依赖项添加到build.gradle文件中:

dependencies {  ...implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'  ...
}

使用两个新的控制器方法更新WebController.java文件:

package com.okta.springsecurityauth;  import org.springframework.stereotype.Controller;  
import org.springframework.ui.Model;  
import org.springframework.web.bind.annotation.RequestMapping;  
import org.springframework.web.bind.annotation.ResponseBody;  @Controller  
public class WebController {  @RequestMapping("/")  @ResponseBody  public String index() {  return "You made it!";  }  @RequestMapping("/login.html")  public String login() {  return "login.html";  }  @RequestMapping("/login-error.html")  public String loginError(Model model) {  model.addAttribute("loginError", true);  return "login.html";  }  }

请注意,/ /login-error.html路径使用与/login.html路径相同的模板,但向Model添加了loginError属性。 这只是处理错误的一种方式。

另外,请注意,新的控制器方法没有@ResponseBody批注。 这与新的Thymeleaf依赖性相结合,意味着这些方法将返回要呈现的模板的名称(与原始响应相反)。 默认情况下,假定模板位于src/main/resources/templates文件夹中。

添加一个新文件: src/main/resources/templates/login.html

<!DOCTYPE html>  
<html xmlns:th="http://www.thymeleaf.org">  
<head>  <title>Login page</title>  <style>  #container {  padding-top:50px;  width:400px;  margin: 0 auto;  font-size:1.5rem;  }  input {  width: 100%;  display:block;  padding: 5px;  font-size: 1.1rem;  box-sizing: border-box;  }  label {  margin-top:10px;  display:block;  }  #submit, #submit:focus {  margin-top: 20px;  border-radius: 8px;  padding: 10px;  color: white;  background-color: #2084ba;  border: none;  }  .error {  color: white;  background-color: indianred;  opacity: 0.7;  padding: 10px;  width: 100%;  text-align: center;  box-sizing: border-box;  border-radius: 8px;  }  </style>  
</head>  
<body>  
<div id="container">  <h2>Login page</h2>  <form th:action="@{/login.html}" method="post">  <label for="username">User</label>  <input type="text" id="username" name="username" autofocus="autofocus" />  <label for="password">Pass</label>  <input type="password" id="password" name="password" />  <input id="submit" type="submit" value="Log in" />  </form>  <p th:if="${loginError}" class="error">There was a problem logging you in</p>  
</div>  
</body>  
</html>

这是用于登录页面的Thymeleaf模板文件。 Thymeleaf是与Spring Boot一起使用的标准模板系统。 这是一个功能齐全的模板系统,具有大量功能。 查看项目网站以获取更多信息。

您需要做的最后更改是更新SecurityController.java文件中的configure(HttpSecurity http)方法:

package com.okta.springsecurityauth;  ...  @Configuration  
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {  @Override  public void configure(HttpSecurity http) throws Exception {  http  .authorizeRequests()  .anyRequest().authenticated()  .and()  .formLogin()  .loginPage("/login.html")  .failureUrl("/login-error.html")  .permitAll();  }  ...  
}

添加了以下三行:

.loginPage("/login.html")  
.failureUrl("/login-error.html")  
.permitAll();  

它们定义了自定义登录端点,登录错误端点,并指示Spring Security允​​许对这些端点的所有请求。

使用./gradlew bootRun再次运行该应用程序。

这次,您将看到自定义登录表单。

(几乎)是SAML时间!

Spring Security SAML扩展目前正在不断变化。 有一些非官方的2.x发行版可以运行,但是没有得到官方的支持。

从Spring Security SAML GitHub页面 :

该项目正在被重写。 有一个在一个基实现发展 ,包括在里程碑版本里程碑库。
在development-3.0分支中,我们正在创建一个在里程碑之上构建的解决方案,并与Spring Security更好地保持一致。 该分支的目的是将其与Spring Security项目合并,并作为Spring Security核心的一部分发布。
因此,我们将不会发布2.0.0里程碑的任何正式版本,但将对其进行维护,直到该里程碑中存在的所有功能都属于Spring Security。

如果您想冒险进入Spring Boot SAML的当前状态, Spring SAML Extension Docs是一个不错的起点。

Okta的Matt Raible也提供了一个很棒的教程 ,说明如何使用Spring Boot 1.x实现SAML。

Vincenzo De Notari提供了一个使用SAML 2.0和Spring Boot 2.1.3 的示例服务提供程序实现 。

注意:如果要使用Okta测试SAML,则需要请求Okta企业版试用。

添加OAuth 2.0 + OpenID Connect身份验证

进入developer.okta.com仪表板后,创建一个OIDC应用程序:

  • 在顶部菜单中,单击“ 应用程序”
使用Spring Security进行身份验证
  • 单击绿色的添加应用程序按钮
  • 单击“ Web应用程序类型”,然后单击“下一步”。
  • 为应用命名 。 任何名字。
  • 登录重定向URI设置为http://localhost:8080/login/oauth2/code/okta
  • 单击完成

记下页面底部的客户端ID客户端密钥 。 您将需要这些。

大! 这就是将Okta配置为OIDC提供程序所要做的。

从示例存储库中打开oauth-okta目录。

在执行其他任何操作之前,您需要更新src/main/resources/application.yml文件。 您需要填写三个值:

  1. Okta URL,类似https://dev-123456.okta.com/oauth2/default
  2. 客户端ID(来自您刚创建的OIDC应用)
  3. 客户端机密(也来自您刚创建的OIDC应用)
okta:  oauth2:  issuer: https://{yourOktaDomain}/oauth2/default  client-id: {yourClientID}client-secret: {yourClientSecret} 
spring:  thymeleaf:  cache: false

接下来,查看build.gradle文件的dependencies部分。

dependencies {  implementation 'com.okta.spring:okta-spring-boot-starter:1.2.0'  implementation 'org.springframework.boot:spring-boot-starter-web'  ...
}

您会注意到一个新的依赖项,并且不再需要spring-boot-starter-security

  • okta-spring-boot-starter

Okta Spring Boot Starter是Okta的扩展,它简化了与OAuth和Spring Security相关的某些依赖项管理和配置。 您可以查看项目GitHub页面以获取更多信息。

老实说,该项目的其余部分非常简单。 Application.java文件是相同的。

WebController.java文件添加了一些新方法。 实际上,这可能与前几个示例相同,只是返回了一个字符串,但是我认为演示如何访问某些经过身份验证的用户信息会很好。

package com.okta.springsecurityauth;  ...  @Controller
public class WebController {@RequestMapping("/")@ResponseBodypublic String home(@AuthenticationPrincipal OidcUser oidcUser) {return "Welcome, " + oidcUser.getFullName();}@RequestMapping("/attributes")@ResponseBodypublic String attributes(@AuthenticationPrincipal OidcUser oidcUser) {return oidcUser.getAttributes().toString();}@RequestMapping("/authorities")@ResponseBodypublic String authorities(@AuthenticationPrincipal OidcUser oidcUser) {return oidcUser.getAuthorities().toString();}}

/ home端点返回欢迎消息和OIDC用户的全名。

/attributes端点返回应用程序从Okta接收到的用户属性。

/authorities端点返回用户权限(角色和作用域)。 这些必须与授权有关,以定义允许用户执行的动作或用户可以访问和修改的资源。

您会注意到没有SecurityConfiguration.java文件。 在这个简单的示例中,这是不必要的,因为OAuth是默认的身份验证方案,默认情况下,所有路径都需要身份验证(这就是我们想要的)。

大! 现在尝试一下。 使用./gradlew bootRunoauth-okta ./gradlew bootRun目录中运行该应用程序。

导航到http://localhost:8080/

如果您想查看Okta的托管登录屏幕,则可能需要使用隐身窗口或退出Okta开发人员仪表板。

使用Spring Security进行身份验证

使用Okta登录名登录,您将被带到一个类似以下内容的屏幕:

Welcome, Andrew Hughes

您也可以尝试使用http://localhost:8080/attributes端点和http://localhost:8080/authorities端点。

通过身份验证完成Spring Boot + Spring Security App

在本教程中,您介绍了一些Spring Boot和Spring Security身份验证方法。 您从HTTP基础开始; 使用自动生成的表单进入基于表单的身份验证; 然后自定义应用程序以将Thymeleaf模板用于登录表单。 接下来,您使用Okta和Spring Boot实现了OAuth / OIDC单一登录应用程序。

您可以在GitHub上的本教程中找到所有示例的源代码。

如果您想了解有关Spring Boot,Spring Security或安全身份验证的更多信息,请查看以下任何出色的教程:

  • Spring Boot,OAuth 2.0和Okta入门
  • 15分钟内将单一登录添加到您的Spring Boot Web App
  • 使用多重身份验证保护您的Spring Boot应用程序安全
  • 使用Spring Boot和GraphQL构建安全的API

如果您想深入研究,请查看Okta Spring Boot Starter GitHub页面 。

如果您对此帖子有任何疑问,请在下面添加评论。 有关更多精彩内容, 请在Twitter上关注@oktadev , 在Facebook上关注我们,或订阅我们的YouTube频道 。

“具有Spring Security的简单身份验证”最初于2019年5月31日发布在Okta Developer博客上。

朋友不允许朋友写用户身份验证。 厌倦了管理自己的用户? 立即尝试Okta的API和Java SDK。 在几分钟之内即可对任何应用程序中的用户进行身份验证,管理和保护。

翻译自: https://www.javacodegeeks.com/2019/07/simple-authentication-spring-security.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/339457.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python程序、画一个笑脸_如何使用canvas画一个微笑的表情(代码示例)

本篇文章给大家带来的内容是关于如何使用canvas画一个微笑的表情(代码示例)&#xff0c;有一定的参考价值&#xff0c;有需要的朋友可以参考一下&#xff0c;希望对你有所帮助。实习期间让我用canvas画一个表情&#xff0c;比较简单&#xff0c;话不多说直接上代码&#xff1a;…

C语言项目:水波纹效果实现

今天教大家一个比较简单的C语言程序&#xff0c;通过用easyx库实现的水波纹效果。说到这里可能大家对水波纹似懂非懂&#xff0c;那么你肯定玩过这游戏吧&#xff01;编辑打水漂我们捡一块扁平的小石头或者瓦片&#xff0c;角度稍微倾斜的甩出去&#xff0c;在力的作用力下&…

jboss fuse 教程_在JBoss Fuse / Fabric8 / Karaf中使用Byteman

jboss fuse 教程您是否曾经尝试了解一些简单的东西不起作用的过程&#xff1f; 您正在任何众所周知的上下文中编写代码&#xff0c;无论出于何种原因它都无法正常工作。 而且您信任您的平台&#xff0c;因此您认真阅读了所有日志。 而且您仍然不知道为什么某些行为不符合预期…

前端用sql 还是mysql_前端小白安装MySQL的踩坑路

1、首先进入官网下载MySQL然鹅当我进入官网&#xff0c;是这样的&#xff01;这是看不起我大学英语六级水平么&#xff0c;这个下载也太奇怪了。点进去也找不到在哪里。(可能是我太傻&#xff0c;勿喷哈)最后我找到了这个下载链接&#xff0c;奶思开始下载&#xff01;我下载的…

C语言项目:绽放的玫瑰花

剁手节已经过去几天了&#xff0c;当天成交量达到了恐怖的2000多亿&#xff0c;不知道大家贡献了多少呢&#xff1f;然而大家还有多少人记得双十一是光棍节呢&#xff1f;广大单身汪同胞还在苦苦挣扎&#xff0c;“大&#xff01;家&#xff01;不&#xff01;要&#xff01;慌…

C语言项目:黑客帝国之数字雨

编辑相信大家看过许许多多的关于计算机黑客、骇客、人工智能、AI方面的电影&#xff0c;每当黑客入侵某个五角大楼&#xff0c;某个网站时&#xff0c;都会出现这样一幅画面&#xff1a;编辑然后就轻而易举的成功入侵夺取管理员权限了&#xff0c;这时候的我们&#xff0c;心情…

idea样式报错_来自强迫症患者的IDEA设置

IDEA的功能强大毋庸置疑&#xff0c;配置选项也是多到让人眼花缭乱。然而不是所有的配置都是用户需要的&#xff0c;特别是强迫症患者更是难伺候。今天和大家分享下个人的配置和。持续更新中&#xff0c;也欢迎大家补充。Duplicated code取消重复代码提示Settings -> Editor…

C语言项目:扫雷大战精简版

一直说写个几百行的小项目&#xff0c;于是我写了一个控制台的扫雷&#xff0c;没有想到精简完了代码才200行左右&#xff0c;不过考虑到这是我精简过后的&#xff0c;浓缩才是精华嘛&#xff0c;我就发出来大家一起学习啦&#xff0c;看到程序跑起来能玩&#xff0c;感觉还是蛮…

mysql ignore 1 lines_MYSQL使用笔记(1)

创建用户 用户名 dnsexpuser 密码&#xff1a;dnsexp1347insert into mysql.user(Host,User,Password) values (localhost,dnsexpuser,password(dnsexp1347)) ;创建数据库分配数据库权限create database wap_tagdb ;grant all privileges on wap_tagdb.*to waptaglocalhost ide…

C语言十大经典例题:附答案

1、/*输出9*9口诀。共9行9列&#xff0c;i控制行&#xff0c;j控制列。*/#include <stdio.h>int main(){ int i,j,result;for (i1;i<10;i){ for(j1;j<10;j){resulti*j;printf("%d*%d%-3d",i,j,result);/*-3d表示左对齐&#xff0c;占3位*/}printf(&qu…

C语言项目:图形马赛克处理技术

每个人都有讨厌的人&#xff0c;例如我就比较讨厌三个姓马的人&#xff0c;马云、马化腾和马赛克。马云骗女人的钱&#xff0c;马化腾骗孩子的钱&#xff0c;马赛克阻挡了人们的分享和交流 。那么大家是不是知道我们今天要分享的项目是什么啦&#xff1f;马赛克处理技术莫非就是…

C语言项目:灰度处理技术

Hello&#xff0c;今天给大家带来的是一个比较简单的图形处理技术-灰度处理技术。那么到底什么是灰度处理技术呢&#xff1f;简单来说&#xff0c;所谓的灰度处理技术就是把一张彩色的图片变成一张灰色的图片。如下图所示&#xff0c;左边是原图&#xff0c;右边则是已经被处理…

C语言项目:推箱子大战

还记得大家小时候玩过的游戏吗&#xff1f;曾经的坦克大战、推箱子、贪吃蛇都是我们以前玩过的小游戏&#xff0c;然而现在随着大型单机、网络游戏的光芒照耀下&#xff0c;那些曾经的小游戏都渐渐消失了&#xff0c;也或许是我们都已经长大了吧。那么今天&#xff0c;我给大家…

java项目加减乘除验证码_课堂Java小程序(加减乘除与验证码)

一、编写一个程序&#xff0c;用户输入两个数&#xff0c;求出其加减乘除&#xff0c;并用消息框显示计算结果。1.设计思想&#xff1a;从键盘输入两个数字和运算符&#xff0c;然后计算。将输入的数字及运算符由字符型转换为整型&#xff0c;再用if判断输入的运算符&#xff0…

C语言绘图:可爱叮当猫

大家对于叮当猫可以说是很熟悉了吧&#xff0c;他还有另外一个名字&#xff0c;也就是哆啦a梦。即便你没有看过他的电影动画&#xff0c;也总会听说过的。叮当猫神奇的口袋总是能够掏出我们幻想功能的任何道具&#xff0c;任意门能够带我们去到任何地方&#xff0c;以及插在头上…

jgit git pull_使用JGit API探索Git内部

jgit git pull您是否想过提交及​​其内容如何存储在Git中&#xff1f; 好吧&#xff0c;我有&#xff0c;在上一个下雨的周末我有一些空闲时间&#xff0c;所以我做了一些研究。 因为我对Java的感觉比对Bash的感觉要多&#xff0c;所以我使用JGit和一些学习测试来探究提交的G…

MFC实现Windows锁屏

编辑Windows锁屏锁屏软件相信大家都见过&#xff0c;以前我去网吧上网的时候也用过这个功能&#xff0c;当你有事情需要立即离开&#xff0c;而又不想让别人碰你的电脑&#xff0c;就需要用扫锁屏软件啦&#xff0c;锁住屏幕之后等回来的时候再输入密码解锁。同样的&#xff0c…

学习红客技术必备

互联网时代已悄悄来临&#xff0c;作为新时代的人们&#xff0c;我们日常生活、工作、学习方面都需要借助互联网来完成&#xff0c;这样&#xff0c;又产生一种新的问题&#xff0c;那就是网络安全的问题&#xff0c;有时我们拼命加班好不容易完成的东西&#xff0c;在一夜之间…

md5withrsa java_浏览器运行java插件报错:Algorithm constraints check failed: MD5withRSA

今天使用kvm管理机房机器的时候发现一只连不上&#xff0c;报以下错误&#xff1a;sun.security.validator.ValidatorException: PKIX path validation failed: java.security.cert.CertPathValidatorException: Algorithm constraints check failed: MD5withRSA我确认我已经把…

今晚课题:2019-3-20

今晚课题C/C万年历技术实现原理上课时间&#xff1a;20:30--22:30上课老师&#xff1a;杰越教育-Larry老师上课地址&#xff1a;https://ke.qq.com/course/353889 课程内容&#xff1a;1、C/Cfor逻辑原理2、重要点数据结构分析3、万年历效果实现展示赢在别人休息时&#xff0c;…