WEB安全

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 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
目录
相关文章
|
1月前
|
安全
网易web安全工程师进阶版课程
《Web安全工程师(进阶)》是由“ i春秋学院联合网易安全部”出品,资深讲师团队通过精炼的教学内容、丰富的实际场景及综合项目实战,帮助学员纵向提升技能,横向拓宽视野,牢靠掌握Web安全工程师核心知识,成为安全领域高精尖人才。 ## 学习地址
23 6
网易web安全工程师进阶版课程
|
4月前
|
安全 测试技术 网络安全
2022年中职“网络安全“江西省赛题—B-4:Web安全深入测试
2022年中职“网络安全“江西省赛题—B-4:Web安全深入测试
63 1
|
5月前
|
安全 前端开发 JavaScript
互联网并发与安全系列教程(07) - 常见的Web安全漏洞(其它漏洞)
互联网并发与安全系列教程(07) - 常见的Web安全漏洞(其它漏洞)
57 0
|
5月前
|
安全 NoSQL Java
互联网并发与安全系列教程(06) - 常见的Web安全漏洞(CSRF攻击)
互联网并发与安全系列教程(06) - 常见的Web安全漏洞(CSRF攻击)
67 0
|
6月前
|
存储 JSON 安全
解锁互联网安全的新钥匙:JWT(JSON Web Token)
解锁互联网安全的新钥匙:JWT(JSON Web Token)
86 0
|
13天前
|
云安全 数据采集 安全
阿里云安全产品,Web应用防火墙与云防火墙产品各自作用简介
阿里云提供两种关键安全产品:Web应用防火墙和云防火墙。Web应用防火墙专注网站安全,防护Web攻击、CC攻击和Bot防御,具备流量管理、大数据防御能力和简易部署。云防火墙是SaaS化的网络边界防护,管理南北向和东西向流量,提供访问控制、入侵防御和流量可视化。两者结合可实现全面的网络和应用安全。
阿里云安全产品,Web应用防火墙与云防火墙产品各自作用简介
|
14天前
|
SQL 安全 PHP
CTF--Web安全--SQL注入之Post-Union注入
CTF--Web安全--SQL注入之Post-Union注入
|
1月前
|
安全 测试技术 网络安全
Web安全基础入门+信息收集篇
学习信息收集,针对域名信息,解析信息,网站信息,服务器信息等;学习端口扫描,针对端口进行服务探针,理解服务及端口对应关系;学习WEB扫描,主要针对敏感文件,安全漏洞,子域名信息等;学习信息收集方法及实现安全测试,能独立理解WEB架构框架,树立渗透测试开展思路!
18 0
Web安全基础入门+信息收集篇
|
1月前
|
安全 数据库 开发工具
Django实战:从零到一构建安全高效的Web应用
Django实战:从零到一构建安全高效的Web应用
48 0
|
1月前
|
安全 中间件 Go
Go语言Web服务性能优化与安全实践
【2月更文挑战第21天】本文将深入探讨Go语言在Web服务性能优化与安全实践方面的应用。通过介绍性能优化策略、并发编程模型以及安全加固措施,帮助读者理解并提升Go语言Web服务的性能表现与安全防护能力。