WEB专业例子测试

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群版 2核4GB 100GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用版 2核4GB 50GB
简介: WEB专业例子测试

loginController

@RequestMapping ("/login")

@RestController
@Configuration
@EnableWebSecurity
public class LoginController  {

  @Resource
private UserDetailServiceImpl userDetailServiceImpl;

  @Bean
   AuthenticationManager authenticationManager(HttpSecurity httpSecurity) throws Exception {

      return httpSecurity.getSharedObject(AuthenticationManagerBuilder.class)

               .userDetailsService(userDetailServiceImpl)

               .passwordEncoder(passwordEncoder())

               .and()

               .build();

   }


  /**
    * 过滤器链
    *
    * @param authenticationManager 身份验证管理器
    * @param http                  http
    * @return {@link SecurityFilterChain}
    * @throws Exception 异常
    */
   @Bean
   public SecurityFilterChain filterChain(AuthenticationManager authenticationManager, HttpSecurity http) throws Exception {

      return http

               .authorizeRequests()

               .antMatchers("/add","/adduser")

               .permitAll()

               .anyRequest()

               .authenticated()

               .and()

               .formLogin()

               .loginPage("/admin/login")

               .loginProcessingUrl("/admin/login")

               .permitAll()

               .successHandler((request, response, authentication) -> {

                   response.setContentType("application/json;charset=utf-8");

                   response.getWriter().write("{\"code\":200,\"msg\":\"登录成功\"}");


               }).failureHandler((request, response, exception) -> {

                   response.setContentType("application/json;charset=utf-8");

                   response.getWriter().write("{\"code\":500,\"msg\":\"登录失败\"}");

               })

               .and()

               .logout()

               .logoutSuccessUrl("/logoutSuccess")

               .permitAll()

               .and()

               .csrf().disable()

               .headers().frameOptions().disable()

               .and()

               .build();

   }

  @Bean
   public WebSecurityCustomizer webSecurityCustomizer() {

      return (web) -> web.ignoring().antMatchers("/layui/**");

   }

  @Bean
   public PasswordEncoder passwordEncoder() {

      return new BCryptPasswordEncoder(); // 使用BCrypt加密
   }



}

RouterController

@Controller
public class RouterController {

  @RequestMapping("/")

public String index(){

      return "index";

   }

  @RequestMapping("/admin/login")

  public String login (){

      return "login";

   }

  @RequestMapping("/logoutSuccess")

  public String logoutSuccess(){

      return "logout";

   }

  @RequestMapping("/add")

  public String add(){

      return "add";

   }

}


addcontroller

@RestController

public class AddController {

  @Resource
   private AdminService adminService;

  @RequestMapping("/adduser")

  public Boolean addUser (Admin admin){

      adminService.addUsers(admin);




      return true;


   }

}

TreeMenuController

@RequestMapping("/list")

@RestController

public class TreeMenuController {

  @Resource
   private TreeMenuService TreeMenuService;

  @RequestMapping("/menu")

public List<TreeMenu>TreeMenu (){

  Admin admin = (Admin) SecurityContextHolder.getContext().getAuthentication().getPrincipal();

  List<TreeMenu> list = TreeMenuService.selectMenuByRoleId(admin.getRoleId());

  return list;

}


}


adminmapper

public interface AdminMapper {

  @Select("select * from admin where account = #{account}")

  Admin selectById(String account) ;

  @Select("insert into admin value (#{id},#{account},#{password},#{roleId})")

  Boolean addUser(Admin admin);

@Select("update admin set account = #{account},password = #{password},role_id = #{roleId} where account = #{account}")

Boolean updateUser(Admin admin);

}


TreeMenuMappeer

public interface TreeMenuMapper {


  @Select("select menu.* FROM treemenu menu inner join role_treemenu rm on menu.id = rm .menu_id where rm .role_id = #{roleId}")

  List<TreeMenu> selectMenuByRoleId (Integer roleId);

}


AdminServiceImpl

public class AdminServiceImpl implements AdminService {

  @Resource
   private AdminMapper adminMapper;

  @Override
   public Admin selectById(String account) {

      return adminMapper.selectById(account);

   }

  @Override
   public Boolean addUsers(Admin admin) {

//        密码加密
       String newPassword =  new BCryptPasswordEncoder().encode(admin.getPassword());

       admin.setPassword(newPassword);

      return adminMapper.addUser(admin);

   }

}


TreeMenuServiceImpl

@Service
public class TreeMenuServiceImpl implements TreeMenuService {

  @Resource
   TreeMenuMapper treeMenuMapper;

  @Override
   public List<TreeMenu> selectMenuByRoleId(Integer roleId) {

      return treeMenuMapper.selectMenuByRoleId(roleId);

   }

}


UserDetailServiceImpl

@Service
public class UserDetailServiceImpl implements UserDetailsService {

  @Resource
   private AdminService adminService;

  @Override
   public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {

      Admin admin=  adminService.selectById(username);

      return admin;

   }

}

AdminService

public interface AdminService {

  Admin selectById(String account);

  Boolean addUsers(Admin admin);

}


TreeMenuService

public interface TreeMenuService {

  List<TreeMenu> selectMenuByRoleId (Integer roleId);

}




ADD.html

html>

<html lang="en">

<head>

   <meta charset="UTF-8">

   <title>注册title>

head>

<body>

input your id:<input id="id">input>

<br>

input your username:<input id="username">input>

<br>

input your password:<input type =password id="password">input>

<br>

input your roleid:<input id="role_id">

<br>

<button onclick="add()">注册button>

<script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js">script>

<script>

   function add(){

       var username = $("#username").val();

       var password = $("#password").val();

        var id = $("#id").val();

         var role_id = $("#role_id").val();

           // ajax 请求登录接口跳转首页
           $.ajax({

               url: '/adduser',

               type: 'post',

               dataType: 'json',

               data: {

               id:id,

               account:username,

               password:password,

               roleId:role_id

                     },

           success: function (data) {

               if (data==true) {

                 window.location = "/login";


                   alert("注册成功,请重新登录!");

               }else alert("注册失败,请重新输入信息!");

           }, error: function (data) {

               console.log(data);

           }

       });

   }

script>

body>

html>



jiazai

<script>

   function jiazai(){

$.ajax({

             url: "/list/menu",

             type: "get",

             success: function (data) {

                 if (data){ // 如果有数据
                     var html = "";

                     for (const tr of data){

                         html += ""+tr.name+""+tr.url+""

                     }

                     $("#table").html(html);

                 }

             }

         })

     }

script>

denglu

<script>

   function denglu(){

       var username = $("#username").val();

       var password = $("#password").val();

           // ajax 请求登录接口跳转首页
           $.ajax({

               url: '/admin/login',

               type: 'post',

               dataType: 'json',

               data: {

               username:username,

               password:password

                     },

           success: function (data) {

               if (data.code == 200) {

                 window.location = "/";

               } else {

                   alert("登录失败");

               }

           }, error: function (data) {

               console.log(data);

           }

       });

   }

script>



yum install java-1.8.0-openjdk-devel -y

java -jar loginDemo.jar

nohup java -jar yytest5.jar &

curl 常用的参数

curl -X POST -d "username=admin&password=123456" http://localhost:8080/login

curl -L http://localhost:8080/logout

-X/--request [GET|POST|PUT|DELETE|…]  使用指定的http method发出 http request

-H/--header                           设定request里的header

-i/--include                          显示response的header

-d/--data                             设定 http parameters

-v/--verbose                          輸出比较多的信息

-u/--user                             使用者账号

-b/--cookie                           cookie 文件路径 使用cookie


#spring.datasource.url=jdbc:mysql://10.1.1.30:3306/manager_system
spring.datasource.url=jdbc:mysql://localhost:3306/manager_system
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.username=root
spring.datasource.password=YangY657X+

mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl

# mybatis ????????
mybatis.configuration.map-underscore-to-camel-case=true



数据库

/*

Navicat Premium Data Transfer

Source Server         : localhost_3306

Source Server Type    : MySQL

Source Server Version : 80030 (8.0.30)

Source Host           : localhost:3306

Source Schema         : manager_system

Target Server Type    : MySQL

Target Server Version : 80030 (8.0.30)

File Encoding         : 65001

Date: 23/03/2023 03:16:08

*/

/**

 如果需要导入的数据库不存在,需要先创建数据库

*/

CREATE DATABASE IF NOT EXISTS `manager_system` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;

SET NAMES utf8mb4;

SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------

-- Table structure for admin

-- ----------------------------

DROP TABLE IF EXISTS `admin`;

CREATE TABLE `admin` (

 `id` int NOT NULL AUTO_INCREMENT,

 `account` varchar(32) COLLATE utf8mb4_bin NOT NULL DEFAULT '' COMMENT '账号',

 `password` varchar(100) COLLATE utf8mb4_bin NOT NULL COMMENT '密码',

 `role_id` int DEFAULT '-1' COMMENT '角色ID',

 PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;

-- ----------------------------

-- Records of admin

-- ----------------------------

BEGIN;

INSERT INTO `admin` (`id`, `account`, `password`, `role_id`) VALUES (1, 'admin', '$2a$10$U3XImY9eYKEe9faMgVzpc..MLjYYH3Ci4..i0WNrhQYR3JkgtptL.', 1);

COMMIT;

-- ----------------------------

-- Table structure for role

-- ----------------------------

DROP TABLE IF EXISTS `role`;

CREATE TABLE `role` (

 `id` int NOT NULL AUTO_INCREMENT,

 `name` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL DEFAULT '' COMMENT '名称',

 PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;

-- ----------------------------

-- Records of role

-- ----------------------------

BEGIN;

INSERT INTO `role` (`id`, `name`) VALUES (1, 'ROLE_admin');

COMMIT;

-- ----------------------------

-- Table structure for role_treemenu

-- ----------------------------

DROP TABLE IF EXISTS `role_treemenu`;

CREATE TABLE `role_treemenu` (

 `id` int NOT NULL AUTO_INCREMENT,

 `role_id` int DEFAULT NULL COMMENT '角色ID',

 `menu_id` int DEFAULT NULL COMMENT '菜单ID',

 PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;

-- ----------------------------

-- Records of role_treemenu

-- ----------------------------

BEGIN;

INSERT INTO `role_treemenu` (`id`, `role_id`, `menu_id`) VALUES (1, 1, 1);

INSERT INTO `role_treemenu` (`id`, `role_id`, `menu_id`) VALUES (2, 1, 2);

INSERT INTO `role_treemenu` (`id`, `role_id`, `menu_id`) VALUES (3, 1, 3);

COMMIT;

-- ----------------------------

-- Table structure for treemenu

-- ----------------------------

DROP TABLE IF EXISTS `treemenu`;

CREATE TABLE `treemenu` (

 `id` int NOT NULL AUTO_INCREMENT,

 `name` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL DEFAULT '' COMMENT '名称',

 `url` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL,

 PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;

-- ----------------------------

-- Records of treemenu

-- ----------------------------

BEGIN;

INSERT INTO `treemenu` (`id`, `name`, `url`) VALUES (1, '首页', '/home');

INSERT INTO `treemenu` (`id`, `name`, `url`) VALUES (2, '控制台', '/console');

COMMIT;

SET FOREIGN_KEY_CHECKS = 1;

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
4天前
|
运维 Java 测试技术
Spring运维之boo项目表现层测试加载测试的专用配置属性以及在JUnit中启动web服务器发送虚拟请求
Spring运维之boo项目表现层测试加载测试的专用配置属性以及在JUnit中启动web服务器发送虚拟请求
11 3
|
25天前
|
XML Web App开发 Java
【软件测试】关于Web自动化测试
【软件测试】关于Web自动化测试
|
4天前
|
缓存 Java Spring
SpringBoot配置第三方专业缓存技术Memcached 下载 安装 整合测试 2024年5000字详解
SpringBoot配置第三方专业缓存技术Memcached 下载 安装 整合测试 2024年5000字详解
8 0
|
14天前
|
存储 关系型数据库 MySQL
Baidu Comate Web在线出题能力测试——MySQL出题能力
Baidu Comate Web在线出题能力测试——MySQL出题能力
18 0
|
1月前
|
JavaScript Java 测试技术
《手把手教你》系列技巧篇(四十六)-java+ selenium自动化测试-web页面定位toast-下篇(详解教程)
【5月更文挑战第10天】本文介绍了使用Java和Selenium进行Web自动化测试的实践,以安居客网站为例。最后,提到了在浏览器开发者工具中调试和观察页面元素的方法。
33 2
|
1月前
|
安全 测试技术 持续交付
在Python Web开发中,测试是一个至关重要的环节
【5月更文挑战第12天】在Python Web开发中,测试至关重要,包括单元测试(unittest模块)、集成测试、功能测试、系统测试、验收测试、性能测试、安全测试和端到端测试。常用的测试工具有unittest、pytest、selenium、requests和coverage。遵循“测试先行”和“持续集成”原则,确保代码质量与稳定性。
153 3
|
1月前
|
JSON 监控 安全
LabVIEW测试和调试Web服务
LabVIEW测试和调试Web服务
32 1
|
1月前
|
SQL 安全 数据处理
Web 测试神器:HackBar 保姆级教程
Web 测试神器:HackBar 保姆级教程
|
1月前
|
XML Web App开发 测试技术
python的Web自动化测试
【4月更文挑战第16天】Python在Web自动化测试中广泛应用,借助Selenium(支持多浏览器交互)、BeautifulSoup(解析HTML/XML)、Requests(发送HTTP请求)和Unittest(测试框架)等工具。测试步骤包括环境搭建、编写测试用例、初始化浏览器、访问页面、操作元素、验证结果、关闭浏览器及运行报告。注意浏览器兼容性、动态内容处理和错误处理。这些组合能提升测试效率和质量。
23 6
|
1月前
|
Web App开发 JavaScript 测试技术
《手把手教你》系列技巧篇(四十五)-java+ selenium自动化测试-web页面定位toast-上篇(详解教程)
【5月更文挑战第9天】本文介绍了在Appium中处理App自动化测试中遇到的Toast元素定位的方法。Toast在Web UI测试中也常见,通常作为轻量级反馈短暂显示。文章提供了两种定位Toast元素的技巧.
28 0