java代码审计基础知识(一)


前言

    Java代码审计学习记录,本文包括Maven和SpringBoot的基础知识。


一、Maven相关基础知识

1.Maven是什么?

    Maven是一个跨平台的项目构建和管理的工具,以往构建一个Spring的Web项目就需要引入大量的jar包,jar包与jar包之间的关系也是很复杂,所以会花费很多的精力在引用Jar包搭建项目环境上,Maven可以帮我们避免这一点从而提高开发效率,只需要告诉Maven需要哪些Jar包,它就会帮助我们下载所有的Jar包。

2.Maven规定的目录结构

    Maven 使用惯例约定优于配置的原则 。它要求在没有定制之前,所有的项目都有如下的结构:

目录目的
${basedir}存放pom.xml和所有的子目录
${basedir}/src/main/java项目的java源代码
${basedir}/src/main/resources项目的资源
${basedir}/src/test/java项目的测试类
${basedir}/src/test/resources测试使用的资源
${basedir}/src/main/webapp/WEB-INFweb应用文件目录,web项目的信息,比如存放web.xml、本地图片、jsp视图页面
${basedir}/target打包输出目录
${basedir}/target/classes编译输出目录
${basedir}/target/generate-sources生成包含在编译阶段中的任何源代码
${basedir}/target/generate-test-sources生成包含在编译阶段中的任何测试源代码
${basedir}/target/test-classes测试编译输出目录
~/.m2/repositoryMaven默认的本地仓库目录位置

    如下图所示:
在这里插入图片描述

2.pom.xml简介

    Maven反映在配置中,就是一个 pom.xml 文件,也就是项目对象模型(Project Object Model)的缩写。该文件用于管理:源代码、配置文件、开发者的信息和角色、问题追踪系统、组织信息、项目授权、项目的url、项目的依赖关系等等。Maven项目中必须包含pom.xml文件。
    pom.xml 文件如下图所示:
在这里插入图片描述

3.pom文件节点

    1)pom.xml文件的节点大致可以分为:基础配置信息,项目信息,依赖配置,构建配置和环境配置五个部分,本文只学习一些常见的节点信息。

<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
            http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <!-- 基本配置 -->
    <groupId>...</groupId>
    <artifactId>...</artifactId>
    <version>...</version>
    <packaging>...</packaging>

    <!-- 依赖配置 -->
    <dependencies>...</dependencies>
    <parent>...</parent>
    <dependencyManagement>...</dependencyManagement>
    <modules>...</modules>
    <properties>...</properties>

    <!-- 构建配置 -->
    <build>...</build>
    <reporting>...</reporting>

    <!-- 项目信息 -->
    <name>...</name>
    <description>...</description>
    <url>...</url>
    <inceptionYear>...</inceptionYear>
    <licenses>...</licenses>
    <organization>...</organization>
    <developers>...</developers>
    <contributors>...</contributors>

    <!-- 环境设置 -->
    <issueManagement>...</issueManagement>
    <ciManagement>...</ciManagement>
    <mailingLists>...</mailingLists>
    <scm>...</scm>
    <prerequisites>...</prerequisites>
    <repositories>...</repositories>
    <pluginRepositories>...</pluginRepositories>
    <distributionManagement>...</distributionManagement>
    <profiles>...</profiles>
</project>

    2)基础配置信息:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  
  <!-- pom模型版本,maven2和3只能为4.0.0-->
  <modelVersion>4.0.0</modelVersion>
  <!-- 项目的组ID,用于maven定位-->
  <groupId>com.xq.tmall</groupId>
  <!-- 项目ID,通常是项目的名称,唯一标识符-->
  <artifactId>tmall</artifactId>
  <!-- 项目的版本-->
  <version>1.0-SNAPSHOT</version>
  <!-- 项目的打包方式-->
  <packaging>jar</packaging>

    基础配置信息节点解释:

节点解释
modelVersionpom模型版本,根据官方文档,Maven2和3只能为4.0.0
groupId项目组id,表明该项目所属的组织或公司,命名规则通常为组织或公司域名反转,然后再加项目名称
artifactId项目的id,有时候和项目名保持一致,有时候是项目名 + 模块名,该id是唯一的,一个goupId下面可能会有多个artifactId,就是通过artifactId区分。比如:consumer-banking。
version当前项目的版本号,一般是:大版本.小版本.增量版本-限定版本号,SHAPSHOT意为快照,说明该项目还处于开发中
packaging项目的打包方式,常用可选值:pom, jar, ejb, maven-plugin, war, ear, rar, par等,默认方式为jar

    3)依赖配置:

<!-- 依赖配置 -->
<parent>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-parent</artifactId>
  <relativePath></relativePath>
  <version>2.1.6.RELEASE</version>
</parent>
</project>

    依赖配置节点解释:

节点解释
parent用于确定父项目的坐标位置,因为maven 支持继承功能,子 POM 可以使用 parent 指定父 POM ,然后继承其配置。
groupId父项目的组Id标识符
artifactId父项目的唯一标识符
relativePathMaven首先在当前项目中找父项目的pom,然后在文件系统的这个位置(relativePath)查找,然后在本地仓库查找,再在远程仓库找。
version父项目的版本

二、SpringBoot相关基础知识

1.SpringBoot是什么?

    在实际渗透测试工作中会发现有众多系统都是采用SpringBoot框架开发的或者是基于SpringBoot二次开发的,SpringBoot是JavaWeb开发当中的主流框架之一。
    SpringBoot基本上是Spring框架的扩展,是为了简化Spring应用的初始搭建以及开发过程所开发的框架,它消除了设置Spring应用程序所需的XML配置,为更快,更高效的开发生态系统铺平了道路,它的核心理念就是开箱即用,快速启动,所以受到了很多企业的喜爱。

2.SpringBoot体系架构

    Spring Boot遵循一个分层的体系结构,其中每个层都与其直接在其下方或上方的层(层次结构)进行通信,主要分为四层。
在这里插入图片描述
    展示层: 表示层负责处理HTTP请求,将JSON参数转换为对象,并对请求进行身份验证并将其传输到业务层。简而言之,它由视图即前端部分组成。
    业务层: 业务层处理所有业务逻辑,它由服务类组成,并使用数据访问层提供的服务。它还执行授权和验证。
    持久层: 持久层包含所有存储逻辑,并将业务对象与数据库行进行相互转换。
    数据库层: 在数据库层中,执行CRUD(创建, 检索, 更新, 删除)操作。

3.SpringBoot流程架构

在这里插入图片描述
    Spring Boot使用类似于Spring MVC,Spring Data等的所有模块。SpringBoot的体系结构与Spring MVC的体系结构相同,不同之处在于: 不需要 DAO 和 DAOImpl 类在Spring启动中。
    基本流:

 (1)客户端发出HTTP请求(PUT或GET)。
 (2)该请求将发送到控制器,然后控制器会映射该请求并进行处理。
 	 之后,如果需要,它将调用服务逻辑。
 (3)在服务层中,所有业务逻辑都将执行。它对通过模型类映射到JPA的数据执行逻辑。
 (4)创建数据访问层并执行CRUD操作。
 (5)如果未发生错误,则将JSP页面返回给用户。

4.Spring-Boot Actuator

    Spring Boot Actuator是Spring Boot提供用于对应用系统进行自省和监控的功能模块,基于此开发人员可以方便地对应用系统某些监控指标进行查看、统计、审计、指标收集等。Actuator提供了基于Http端点或JMX来管理和监视应用程序。
    Actuator提供了一些默认的REST接口,通过这些接口可以很方便的了解应用程序的运行状况。其中某些端口比较敏感,需要在指定的权限下才能进行访问,否则会造成接口信息泄露,命令注入等危害。
    查看pom文件中是否含有以下代码,有的话就代表使用了Actuator。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

5.用IDEA创建一个SpringBoot项目

    1)本文所使用的的IDEA版本为:2021.3,打开IDEA新建项目,选择Spring Initializer方式便捷创建项目,项目所需要求需按照你实际的更改,然后点击next。
在这里插入图片描述
    2)选择Web中的spring Web选项,其他默认就好了,点击完成。
在这里插入图片描述
    3)Maven自动加载完所需依赖后,创建完成后项目结构如下图所示:
在这里插入图片描述    4)在HelloApplication 同一级目录下创建一个controller包,并创建一个HelloController方法。
在这里插入图片描述
    5)在HelloController中编写一些简单的代码。
在这里插入图片描述

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {

    @RequestMapping("/hello")
    public String hello(){
        return "hello World";
    }
}

    6)由于SpringBoot自带tomcat,所以直接启动项目,访问:http://127.0.0.1:8080/hello,输出Hello World。

在这里插入图片描述
    7)部分注解:

注解说明
@SpringBootApplication表示这个类为SpringBoot的主配置类,SpringBoot项目应运行这个类下面的main方法来启动SpringBoot应用
@Controller把用户提交来的请求通过对URL的匹配,分配个不同的接收器,再进行处理,然后向用户返回结果。@Controller一般配合模版来使用。现在项目大多是前后端分离,后端处理请求,然后返回JSON格式数据即可,所以被很少使用了
@ResponseBody将方法返回值绑定到 Web 响应主体,就是这个类的所有方法返回的数据都会直接给浏览器
@RestController@ResponseBody和@Controller组合注解,用于返回JSON字符串
@RequestMapping用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径;用于方法上,表示在类的父路径下追加方法上注解中的地址将会访问到该方法,此处需注意@RequestMapping用在类上可以没用,但是用在方法上必须有。
@GetMapping等价于@RequestMapping(value = “”,method = RequestMethod.GET)就是使用Get方法提交
@PathVariable接受请求URL路径中占位符的值
@RequestParam将请求参数绑定到你控制器的方法参数上,常用于POST请求处理表单。

    @RequestMapping注解案例演示:

@Controller  
//设置想要跳转的父路径  
@RequestMapping(value = "/Controllers")  
public class StatisticUserCtrl {  
    //如需注入,则写入需要注入的类  
    //@Autowired  
  
            // 设置方法下的子路经  
            @RequestMapping(value = "/method")  
            public String helloworld() {  
  
                return "helloWorld";  
  
            }  
}  

    注释:Controllers就是父路径,method就是父路径下的方法路经。所以本地服务器上访问方法路径就是:http://localhost:8080/controller/method,就会返回(跳转)到“ helloWorld.jsp ”页面。

    @PathVariable注解案例演示:

public class HelloController {
  @RequestMapping("/whoami/{name}/{sex}")
  public String hello(@PathVariable("name") String name, @PathVariable("sex") String sex){
      return "Hello" + name + sex;
  }
  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
回答: 学习Java基础知识是成为一个Java程序员的必备条件。根据引用和引用的内容,初学Java的时候,你需要掌握以下基础知识: 1. 面向对象的知识: 理解什么是对象和类,了解封装、多态、继承、抽象类和接口的概念。同时要了解这些概念在Java中的具体体现,例如类和对象的区别,类的封装等。 2. Java语法: 熟悉Java的语法规则,包括变量和数据类型、操作符、控制流语句(如if-else语句、循环语句)、方法和函数的定义等。这些知识将帮助你编写基本的Java代码。 3. Java标准库: 了解Java的内置类和常用工具类,如Java Compiler、反射、常用工具类等。这些类和工具能够帮助你更方便地进行Java编程。 总而言之,初学Java时,你需要掌握面向对象的知识、Java的语法规则以及Java标准库的常用类和工具。掌握这些基础知识将使你能够编写简单的Java代码,并为你日后深入学习和应用Java打下坚实的基础。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [初学Java该学哪些知识?这6大知识必学](https://blog.csdn.net/xiaoxijinger/article/details/123788210)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [Java基础知识总结(2021版)](https://blog.csdn.net/guorui_java/article/details/112391105)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值