Spring Boot开发之SpringSercurity(续)

news2025/4/19 12:38:58

Spring Boot开发之SpringSercurity

  • 一、授权
    • 1、打开上次项目以及数据库
    • 2、有的页面不登录也能访问,比如首页、登录以及注册等,因此对于某些请求不需要登录则放行这些接口
      • (1)修改MySercurityConfig
      • (2)修改TestController类
      • (3)点击运行,在没登录时访问/home、/login路径不需要登录,而其他界面都被拦截并跳转到登录页面
    • 3、修改MySercurityConfig类,多增加一个admin用户,user用户拥有user权限,admin用户拥有admin、user权限
    • 4、在templates文件夹下新建user.html和admin.html
    • 5、修改TestController类
    • 6、点击运行,登录user用户可以访问user页面,但不可以访问admin页面;登录admin用户既可以访问user页面,也可以访问admin页面
      • (1)登录user用户
      • (2)登录admin用户
  • 二、数据库认证:从数据库中获取用户名和密码进行验证
    • 1、在utils文件夹下新建MyUserService类
    • 2、修改MySercurityConfig类
    • 3、点击运行,登录user用户可以访问user页面,但不可以访问admin页面;登录admin用户既可以访问user页面,也可以访问admin页面
      • (1)登录user用户
      • (2)登录admin用户
  • 三、自定义登录页面
    • 1、修改MySercurityConfig类
    • 2、修改login.html
    • 3、点击运行,登录页面变成我们自定义的页面啦
  • 四、自定义登出页面
    • 1、修改MySercurityConfig类
    • 2、在templates文件夹下新建mylogout.html
    • 3、修改TestController类
    • 4、点击运行,登出页面也变为我们自定义的页面啦,退出登录后回到登录页面
  • 五、文件上传
    • 1、修改application.properties
    • 2、在templates文件夹下新建file.html
    • 3、在controller文件夹下新建FileController类
    • 4、点击运行,选择文件成功
    • 5、修改MySercurityConfig类,设置"/**"放行所有接口
    • 6、修改FileController类
    • 7、点击运行,选择文件成功提交到指定路径
    • 8、修改FileController类,为了防止因文件名字相同而出现文件覆盖问题,将文件名设置为随机数+文件名
    • 9、点击运行,提交两次相同文件,文件不会被覆盖
    • 10、修改FileController类,将文件显示出来
    • 11、修改success.html
    • 12、点击运行,显示图片成功
  • 六、请求JSON接口
    • 1、在pojo文件夹下新建News类
    • 2、在controller文件夹下新建JSONController类
    • 3、修改MySercurityConfig类
    • 4、在templates文件夹下新建News.html
    • 5、点击运行,成功获取JSON数据

今天接着学习SpringSercurity的相关知识以及实现,都非常基础。首先打开上次项目以及数据库,上次我们学习到了认证,今天接着学习。

一、授权

1、打开上次项目以及数据库

在这里插入图片描述
在这里插入图片描述

2、有的页面不登录也能访问,比如首页、登录以及注册等,因此对于某些请求不需要登录则放行这些接口

(1)修改MySercurityConfig

在这里插入图片描述

    //  授权
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeHttpRequests()//拦截所有请求
                .antMatchers("/home", "/test", "/login").permitAll()//某些请求不需要登录->放行某些接口
                .anyRequest().authenticated();//其他的接口拦截
        http.formLogin();//拦截后跳转到表单页面
    }

(2)修改TestController类

在这里插入图片描述

    @RequestMapping("home")
    public String home(){
        return "test.html";
    }

(3)点击运行,在没登录时访问/home、/login路径不需要登录,而其他界面都被拦截并跳转到登录页面

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

3、修改MySercurityConfig类,多增加一个admin用户,user用户拥有user权限,admin用户拥有admin、user权限

在这里插入图片描述
在这里插入图片描述

//  认证
    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception{
        auth.inMemoryAuthentication()
                .withUser("user")
                .password(new BCryptPasswordEncoder().encode("123456"))
                .authorities("user")
                .and()
                .withUser("admin")
                .password(new BCryptPasswordEncoder().encode("123456"))
                .authorities("user","admin");//权限->字符串  ->页面(配置权限)
    }
    //  授权
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeHttpRequests()//拦截所有请求
                .antMatchers("/home","/login").permitAll()//某些请求不需要登录->放行某些接口
                .antMatchers("/user").hasAuthority("user")//对页面配置权限
                .antMatchers("/admin").hasAuthority("admin")
                .anyRequest().authenticated();//其他的接口拦截
        http.formLogin();//拦截后跳转到表单页面
    }

4、在templates文件夹下新建user.html和admin.html

在这里插入图片描述

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>用户页面</h1>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>admin页面</h1>
</body>
</html>

5、修改TestController类

在这里插入图片描述

    @RequestMapping("user")
    public String user(){
        return "user.html";
    }
    @RequestMapping("admin")
    public String admin(){
        return "admin.html";
    }

6、点击运行,登录user用户可以访问user页面,但不可以访问admin页面;登录admin用户既可以访问user页面,也可以访问admin页面

(1)登录user用户

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(2)登录admin用户

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二、数据库认证:从数据库中获取用户名和密码进行验证

1、在utils文件夹下新建MyUserService类

在这里插入图片描述

package com.example.springboot2.utils;

import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

@Service
public class MyUserService implements UserDetailsService {
//   重写登录逻辑  username->登录页面输入的用户名
//   第一步:数据库user表 字段:id username password
//   username去数据库中查询用户(select * from user where username=?)->0、1、多条(注册时->username提示不能重复)
//    第二步:如果是0条->throws UsernameNotFoundException 如果是1条->从用户信息取得密码
//    第三步:用查询出来的密码与用户输入的密码进行比对(框架完成)
//    第四步:根据username 去查询权限roles(id,name)  user表roles表多对多->中间表
    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
        String password="123456";//todo 从数据库中查询得到
//       user、admin权限 todo 从数据库中查询得到
        GrantedAuthority authority1=new SimpleGrantedAuthority("user");
        GrantedAuthority authority2=new SimpleGrantedAuthority("admin");
        List<GrantedAuthority> list=new ArrayList<>();
        if (username.equals("user")){
            list.add(authority1);
        }
        if (username.equals("admin")){
            list.add(authority1);
            list.add(authority2);
        }
        return new User(username,new BCryptPasswordEncoder().encode(password),list);
    }
}

2、修改MySercurityConfig类

在这里插入图片描述

package com.example.springboot2.utils;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
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.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;

@EnableWebSecurity
public class MySercurityConfig extends WebSecurityConfigurerAdapter {
//  认证
//    认证->从数据库中获取用户名和密码进行验证
    @Autowired
    MyUserService myUserService;
    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception{
        auth.userDetailsService(myUserService).passwordEncoder(new BCryptPasswordEncoder());
//        auth.inMemoryAuthentication()
//                .withUser("user")
//                .password(new BCryptPasswordEncoder().encode("123456"))
//                .authorities("user")
//                .and()
//                .withUser("admin")
//                .password(new BCryptPasswordEncoder().encode("123456"))
//                .authorities("user","admin");//权限->字符串  ->页面(配置权限)
    }
    @Bean
    PasswordEncoder passwordEncoder(){
        return new BCryptPasswordEncoder();
    }
    //  授权
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeHttpRequests()//拦截所有请求
                .antMatchers("/home","/login").permitAll()//某些请求不需要登录->放行某些接口
                .antMatchers("/user").hasAuthority("user")//对页面配置权限
                .antMatchers("/admin").hasAuthority("admin")
                .anyRequest().authenticated();//其他的接口拦截
        http.formLogin();//拦截后跳转到表单页面
    }
}

3、点击运行,登录user用户可以访问user页面,但不可以访问admin页面;登录admin用户既可以访问user页面,也可以访问admin页面

(1)登录user用户

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(2)登录admin用户

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三、自定义登录页面

1、修改MySercurityConfig类

在这里插入图片描述
在这里插入图片描述

  //  授权
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeHttpRequests()//拦截所有请求
                .antMatchers("/home","/login").permitAll()//某些请求不需要登录->放行某些接口
                .antMatchers("/user").hasAuthority("user")//对页面配置权限
                .antMatchers("/admin").hasAuthority("admin")
                .anyRequest().authenticated();//其他的接口拦截
        http.formLogin()//拦截后跳转到表单页面
                .loginPage("/login")// /login 自己写的页面->默认需要权限
                .loginProcessingUrl("/user/login");//登录提交的请求->框架提供的
    }

2、修改login.html

在这里插入图片描述

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>登录页面</title>
</head>
<body>
<h1>登录页面</h1>
<form th:action="@{/user/login}" method="post">
    <div>用户名:<input name="username"></div>
    <div>密码:<input name="password"></div>
    <div><input type="submit" value="提交"></div>
</form>
</body>
</html>

3、点击运行,登录页面变成我们自定义的页面啦

在这里插入图片描述

四、自定义登出页面

1、修改MySercurityConfig类

在这里插入图片描述

    //  授权
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeHttpRequests()//拦截所有请求
                .antMatchers("/home","/login").permitAll()//某些请求不需要登录->放行某些接口
                .antMatchers("/user").hasAuthority("user")//对页面配置权限
                .antMatchers("/admin").hasAuthority("admin")
                .anyRequest().authenticated();//其他的接口拦截
        http.formLogin()//拦截后跳转到表单页面
                .loginPage("/login")// /login 自己写的页面->默认需要权限
                .loginProcessingUrl("/user/login")//登录提交的请求->框架提供的
                .and()
                .logout()
                .logoutUrl("/logout");//登录提交的请求
    }

2、在templates文件夹下新建mylogout.html

在这里插入图片描述

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>退出登录页面</title>
</head>
<body>
<!--框架提供的登出接口-->
<!--/user/login  ->security提供登录验证接口-->
<h1>你确定要退出吗?</h1>
<form th:action="@{/logout}" method="post">
    <button>退出登录</button>
</form>
</body>
</html>

3、修改TestController类

在这里插入图片描述

    @RequestMapping("mylogout")
    public String mylogout(){
        return "mylogout.html";
    }

4、点击运行,登出页面也变为我们自定义的页面啦,退出登录后回到登录页面

在这里插入图片描述
在这里插入图片描述

五、文件上传

1、修改application.properties

在这里插入图片描述

spring.web.resources.static-locations=classpath:/templates,file:D:/data/

2、在templates文件夹下新建file.html

在这里插入图片描述

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form th:action="@{/filecommit}" method="post" enctype="multipart/form-data">
  <div>文件名:<input type="file" name="file"></div>
  <div><input type="submit" value="提交"></div>
</form>
</body>
</html>

3、在controller文件夹下新建FileController类

在这里插入图片描述

package com.example.springboot2.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.util.UUID;

@Controller
public class FileController {
    @RequestMapping("file")
    public String file(){
        return "file.html";
    }
}

4、点击运行,选择文件成功

在这里插入图片描述

在这里插入图片描述

5、修改MySercurityConfig类,设置"/**"放行所有接口

在这里插入图片描述

    //  授权
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeHttpRequests()//拦截所有请求
                .antMatchers("/home","/login","/**").permitAll()//某些请求不需要登录->放行某些接口
                .antMatchers("/user").hasAuthority("user")//对页面配置权限
                .antMatchers("/admin").hasAuthority("admin")
                .anyRequest().authenticated();//其他的接口拦截
        http.formLogin()//拦截后跳转到表单页面
                .loginPage("/login")// /login 自己写的页面->默认需要权限
                .loginProcessingUrl("/user/login")//登录提交的请求->框架提供的
                .and()
                .logout()
                .logoutUrl("/logout");//登录提交的请求
    }

6、修改FileController类

在这里插入图片描述

//   图片、音频、视频一般不直接存数据库    数据库只存文件名字和文件路径
    @RequestMapping("filecommit")
    public String filecommit(MultipartFile file) throws IOException {
       String filedirs="D:/data/";
       String filename=file.getOriginalFilename();
       file.transferTo(new File(filedirs+filename));
        return "success.html";
    }

7、点击运行,选择文件成功提交到指定路径

在这里插入图片描述

在这里插入图片描述

8、修改FileController类,为了防止因文件名字相同而出现文件覆盖问题,将文件名设置为随机数+文件名

在这里插入图片描述

//   图片、音频、视频一般不直接存数据库    数据库只存文件名字和文件路径
    @RequestMapping("filecommit")
    public String filecommit(MultipartFile file) throws IOException {
       String filedirs="D:/data/";
//       String filename=file.getOriginalFilename();
        String filename= UUID.randomUUID()+file.getOriginalFilename();
       file.transferTo(new File(filedirs+filename));
        return "success.html";
    }

9、点击运行,提交两次相同文件,文件不会被覆盖

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

10、修改FileController类,将文件显示出来

在这里插入图片描述


//   图片、音频、视频一般不直接存数据库    数据库只存文件名字和文件路径
    @RequestMapping("filecommit")
    public String filecommit(MultipartFile file, Model model) throws IOException {
       String filedirs="D:/data/";
//       String filename=file.getOriginalFilename();
        String filename= UUID.randomUUID()+file.getOriginalFilename();
       file.transferTo(new File(filedirs+filename));
        model.addAttribute("filename",filename);
        return "success.html";
    }

11、修改success.html

在这里插入图片描述

12、点击运行,显示图片成功

在这里插入图片描述
在这里插入图片描述

六、请求JSON接口

1、在pojo文件夹下新建News类

在这里插入图片描述

package com.example.springboot2.pojo;

import lombok.Data;

@Data
public class News {
    private int id;
    private String title;
    private String content;
}

2、在controller文件夹下新建JSONController类

在这里插入图片描述

package com.example.springboot2.controller;

import com.example.springboot2.pojo.News;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class JSONController {
//    JSON数据->手机Android端/IOS/小程序
    @RequestMapping("getnews")
    @ResponseBody  //返回JSON数据(特殊格式的字符串)
    public News getNews(){
        News news=new News();
        news.setId(1);
        news.setTitle("新闻标题");
        news.setContent("新闻内容");
        return news;
    }
}

3、修改MySercurityConfig类

在这里插入图片描述

//       JSON接口配置
        http.cors();
        http.csrf().disable();

4、在templates文件夹下新建News.html

在这里插入图片描述

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script>
</head>
<body>
<!--ajax请求获取JSON数据->JavaScript 不刷新页面在该页面请求数据-->
<!--ajax ->jQuery-->
<script>
  function getnews(){
  //  jQuery请求数据
    $.ajax({
      type:"post",
      url:"http://localhost:8080/getnews",
      contentType:"application/json",
      success:function (res){
        console.log(res)
          document.getElementById("title").innerText=res.title
          document.getElementById("content").innerText=res.content
      }
    })
  }
</script>
<div id="title">新闻标题</div>
<div id="content">新闻内容</div>
<button onclick="getnews()">获取数据</button>
</body>
</html>

5、点击运行,成功获取JSON数据

在这里插入图片描述
在这里插入图片描述

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

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

相关文章

数据抓取工具有哪些-数据抓取工具免费推荐的有哪些

随着社会的进步&#xff0c;科技的发展。不管是企业还是个人都清楚地明白了数据的重要性。不仅可以让我们掌握一手资源&#xff0c;同时还能通过数据更清楚竞争对手。同时也告别了手动复制粘贴的痛苦。 企业人员 通过爬取动态网页数据分析客户行为拓展新业务&#xff0c;分析…

java毕业设计健民中医药方网设计(附源码、数据库)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; Springboot mybatis Maven Vue 等等组成&#xff0c;B/…

NC5 二叉树根节点到叶子节点的所有路径和

描述 给定一个二叉树的根节点root&#xff0c;该树的节点值都在数字0−9 之间&#xff0c;每一条从根节点到叶子节点的路径都可以用一个数字表示。 1.该题路径定义为从树的根结点开始往下一直到叶子结点所经过的结点 2.叶子节点是指没有子节点的节点 3.路径只能从父节点到子节点…

java命令中的options

1. Java命令概述 安装JDK时&#xff0c;会使用java -version查看JDK版本&#xff0c;并验证安装是否成功直接输入java&#xff0c;会给出java命令的使用说明 -options&#xff1a;可选&#xff0c;java命令的命令行选项&#xff0c;多个选项使用空格分隔class&#xff1a;要启…

新人一看就懂:Dubbo3 + Nacos的RPC远程调用框架demo

文章目录一、前言Feign和Dubbo到底有啥区别&#xff0c;为啥大厂都爱用RPC框架&#xff1f;二、简介三、dubbo-api&#xff08;对外暴漏的接口&#xff09;1、pom依赖2、TestService接口四、dubbo-provider&#xff08;服务提供者&#xff09;1、pom依赖2、TestServiceImpl实现…

HCIP-Datacom OSPF进阶(一) 最常用的动态路由协议

目录 OSPF&#xff1a;开放式最短路径优先 OSPF配置方法&#xff1a; OSPF报文头部&#xff1a; OSPF报文类型&#xff1a; OSPF状态机&#xff1a; DR与BDR的作用&#xff1a; 设置选举DR时的优先级&#xff1a; OSPF的网络类型&#xff1a; 修改OSPF接口网络类型命令…

java毕业设计教学平台(附源码、数据库)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; Springboot mybatis Maven Vue 等等组成&#xff0c;B/…

Java实现五子棋小游戏(附源码)

Java进阶学习专栏&#xff1a;【Java】进阶篇 Java基础学习专栏&#xff1a;【Java】基础篇 文章目录一、游戏介绍二、效果展示三、代码展示1、登录页面2、算法程序3、棋盘实现四、资源下载五、文末总结一、游戏介绍 今天给大家分享一个用java写的小游戏——《五子棋》 &#…

计算机毕业设计SSM电影网站系统【附源码数据库】

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

【编程题】【Scratch三级】2021.12 数星星

数星星 Goblin有个很厉害的魔法:他一挥手就可以点亮夜空中五彩斑斓的星星灯。 1. 准备工作 (1)删除小猫角色,添加"Goblin"角色,并删除Goblin角色的造型"golblin-a"、“goblin-c"和"goblin-d”,添加角色"Star"; (2)添加“Sta…

Matlab之自适应位移相位中心天线脉冲消除器(附源码)

目录 一、何时使用自适应DPCA脉冲消除器 二、自适应DPCA脉冲消除器可抑制杂波和干扰 三、程序 一、何时使用自适应DPCA脉冲消除器 考虑需要抑制杂波的机载雷达系统 返回并可能干扰干扰。根据以下任何一项 条件下&#xff0c;可以选择自适应 DPCA &#xff08;ADPCA&#xf…

数据挖掘与分析应用:tableau可视化数据分析,仪表盘,折线图,饼图,条形图,地图,散点图,区域图,表格,数据分析引用

数据挖掘与分析应用&#xff1a;tableau可视化数据分析&#xff0c;仪表盘&#xff0c;折线图&#xff0c;饼图&#xff0c;条形图&#xff0c;地图&#xff0c;散点图&#xff0c;区域图&#xff0c;表格&#xff0c;数据分析引用 2022找工作是学历、能力和运气的超强结合体&…

Java集合

一、集合概述 1、数组的特点 数组的大小是固定的&#xff0c;一旦创建后&#xff0c;数组的大小是无法改变的。数组只能存储相同类型的数据。数组查询效率高(有索引&#xff0c;元素内存连续分配)&#xff0c;增删效率低(不断的扩容)。 2、数组和集合的区别 相同点&#xff1…

【Designing ML Systems】第 6 章 :模型开发和离线评估

&#x1f50e;大家好&#xff0c;我是Sonhhxg_柒&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流&#x1f50e; &#x1f4dd;个人主页&#xff0d;Sonhhxg_柒的博客_CSDN博客 &#x1f4c3; &#x1f381;欢迎各位→点赞…

目标检测论文解读复现之三:基于改进YOLOv7的X光图像旋转目标检测

目标检测论文解读复现 文章目录目标检测论文解读复现前言一、摘要二、网络模型及核心创新点三、应用数据集四、实验效果五、实验结论六、投稿期刊介绍前言 此前出了目标改进算法专栏&#xff0c;但是对于应用于什么场景&#xff0c;需要什么改进方法对应与自己的应用场景有效果…

json字符串、JSNObject、JSONArray、jsonbean、list等相关的转换、过滤工具方法测试

一、准备工作 引入pom <dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.78</version> </dependency><dependency><groupId>org.projectlombok</groupId><art…

云计算 - 4 - Spark的安装与应用

云计算 - 4 - Spark的安装与应用目标Spark 的安装&#xff1a;1、下载配置 Scala1.1 下载 Scala1.2 配置 Scala 的路径1.3 测试 Scala 是否安装完成2、下载配置Spark2.1 下载Spark2.2 配置 Spark 的路径2.3 修改 Spark 的配置文件3、将文件复制到子节点4、启动Spark5、测试Spar…

nginx模块

目录 搭建域名虚拟主机 nginx索引 状态索引 访问控制 基于ip限制 基于用户限制 配置nginx官方yum源 http://nginx.org/en/linux_packages.html#RHEL-CentOS vim /etc/yum.repos.d/nginx.repo [nginx-stable] namenginx stable repo baseurlhttp://nginx.org/packages/cent…

Linux调试工具:gdb的使用

文章目录一、gdb简介二、gdb基础命令操作1.进入gdb &#xff1a;gdb 文件名2.显示代码&#xff1a;l3.开始调试&#xff1a;r4.打断点&#xff1a;b 行号5.显示断点信息&#xff1a;info b6.删断点&#xff1a;d 编号7.逐过程&#xff1a;n8.逐语句&#xff1a;s9.进入堆栈&…

JavaScript基础

目录 数据类型 基本数据类型 引用数据类型 变量 运算符 算数运算符 赋值运算符 字符串连接符 关系运算符 逻辑运算符 三目运算符 分支语句 循环语句 流程控制语句 错误处理 函数 数组 对象 内置对象 String RegExp Math Date 全局函数 简介&#xff1a; 是…