WEB专业例子测试

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 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;

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
2月前
|
Web App开发 前端开发 JavaScript
探索Python科学计算的边界:利用Selenium进行Web应用性能测试与优化
【10月更文挑战第6天】随着互联网技术的发展,Web应用程序已经成为人们日常生活和工作中不可或缺的一部分。这些应用不仅需要提供丰富的功能,还必须具备良好的性能表现以保证用户体验。性能测试是确保Web应用能够快速响应用户请求并处理大量并发访问的关键步骤之一。本文将探讨如何使用Python结合Selenium来进行Web应用的性能测试,并通过实际代码示例展示如何识别瓶颈及优化应用。
130 5
|
28天前
|
Web App开发 测试技术 数据安全/隐私保护
自动化测试的魔法:使用Python进行Web应用测试
【10月更文挑战第32天】本文将带你走进自动化测试的世界,通过Python和Selenium库的力量,展示如何轻松对Web应用进行自动化测试。我们将一起探索编写简单而强大的测试脚本的秘诀,并理解如何利用这些脚本来确保我们的软件质量。无论你是测试新手还是希望提升自动化测试技能的开发者,这篇文章都将为你打开一扇门,让你看到自动化测试不仅可行,而且充满乐趣。
|
1月前
|
Web App开发 设计模式 JavaScript
自动化测试之美:如何利用Selenium实现Web应用的高效测试
【10月更文挑战第29天】在软件开发的世界中,测试是确保产品质量的关键步骤。本文将带你了解如何使用Selenium这一强大的自动化测试工具,提高Web应用测试的效率和准确性。通过实际案例,我们将探索Selenium的核心功能及其在现代软件开发中的应用,旨在帮助读者掌握自动化测试的精髓,从而提升软件测试工作的整体效能。
35 0
|
2月前
|
编解码 前端开发 JavaScript
使用 CSS 打印样式为 Web 页面设置专业的打印机效果
使用 CSS 打印样式为 Web 页面设置专业的打印机效果
61 2
|
2月前
|
安全 Linux Shell
Kali渗透测试:使用Metasploit对Web应用的攻击
Kali渗透测试:使用Metasploit对Web应用的攻击
133 4
|
3月前
|
前端开发 机器人 测试技术
【RF案例】Web自动化测试弹窗处理
在进行Web自动化测试时,常会遇到不同类型的弹窗,如ajax、iframe、新窗口及alert/Confirm等。这些弹窗可通过Selenium进行定位与处理。其中,ajax弹窗直接定位处理;iframe需先选中再操作;新窗口类似iframe处理;而alert/Confirm则需特殊方法应对。在Robot Framework中,需先定义并获取窗口后使用特定关键字处理。此外,还有部分div弹窗需在消失前快速定位。希望本文能帮助大家更好地处理各类弹窗。
52 6
【RF案例】Web自动化测试弹窗处理
|
2月前
|
监控 Java Maven
springboot学习二:springboot 初创建 web 项目、修改banner、热部署插件、切换运行环境、springboot参数配置,打包项目并测试成功
这篇文章介绍了如何快速创建Spring Boot项目,包括项目的初始化、结构、打包部署、修改启动Banner、热部署、环境切换和参数配置等基础操作。
151 0
|
2月前
|
安全 Java Linux
Kali渗透测试:通过Web应用程序实现远程控制
Kali渗透测试:通过Web应用程序实现远程控制
47 0
|
4月前
|
测试技术
基于LangChain手工测试用例转Web自动化测试生成工具
该方案探索了利用大模型自动生成Web自动化测试用例的方法,替代传统的手动编写或录制方式。通过清晰定义功能测试步骤,结合LangChain的Agent和工具包,实现了从功能测试到自动化测试的转换,极大提升了效率。不仅减少了人工干预,还提高了测试用例的可维护性和实用性。
|
4月前
|
Web App开发 测试技术 API
自动化测试之美:使用Selenium和Python进行Web应用测试
【8月更文挑战第31天】在软件开发的快节奏世界中,自动化测试如同一束明灯,照亮了质量保证之路。本文将引导你通过Selenium和Python的强大组合,探索如何构建高效的Web应用测试框架。我们不仅会讨论理论,还会深入代码,从一个简单的示例开始,逐步扩展至更复杂的场景。无论你是初学者还是有经验的开发者,这篇文章都将为你提供宝贵的见解和实用的技巧。让我们一同揭开自动化测试的神秘面纱,体验它的魅力所在。