89.【SpringBoot-02】(四)

本文涉及的产品
访问控制,不限时长
简介: 89.【SpringBoot-02】

8.在Resource资源目录下配置UserMapper.xml的实现。application.yaml

  • resource目录下切换文档需要是 ‘/’ 不是 ‘.’
  • classpath: 指的是我们设置的UserMapper.xml
spring:
  datasource:
      username: root
      password: 121788
      url: jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC&useonicode=true&characterEncoding=utf-8
      driver-class-name: com.mysql.jdbc.Driver
# 整合Mybatis 就相当于Mybatis的核心包一样
mybatis:
      type-aliases-package: com.jsxs.pojo.*
      mapper-locations: classpath:mybatis/mapper/*.xml

设置Controller层,不设置业务层了。我们只进行测试数据

package com.jsxs.controller;
import com.jsxs.mapper.UserMapper;
import com.jsxs.pojo.User;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.List;
@RestController
@RequestMapping("/jsxs")
public class UserController {
    @Resource
    private UserMapper userMapper;
//    查询全部的信息
    @RequestMapping("/all")
    public List<User> queryList(){
        List<User> users = userMapper.queryList();
        return users;
    }
//   通过id进行查询数据
    @RequestMapping("/id/{id}")
    public User queryById(@PathVariable("id") int id){
        User user = userMapper.UserById(id);
        return user;
    }
//  http://localhost:8080/jsxs/add?id=8&name=sdsds&pwd=2711111
    @RequestMapping("/add")
    public String addUser(User user){
        int i = userMapper.addUser(user);
        if (i>0){
            return "恭喜您,数据添加成功";
        }else {
            return "很抱歉,数据添加失败";
        }
    }
// 进行数据的修改
    @RequestMapping("/update")
    public String updateUser(User user){
        int i = userMapper.updateUser(user);
        if (i>0){
            return "恭喜您,数据更新成功";
        }else {
            return "很抱歉,数据更新失败";
        }
    }
//
    @RequestMapping("/delete/{id}")
    public String deleteUser(@PathVariable("id") int id){
        int i = userMapper.deleteUserById(id);
        if (i>0){
            return "恭喜您,数据删除成功";
        }else {
            return "很抱歉,数据删除失败";
        }
    }
}

(十五)、SpringSecurity (安全)

一个安全的框架,其实通过过滤器和拦截器也可以实现

首先我们看下它的官网介绍:Spring Security官网地址

Spring Security is a powerful and highly customizable authentication and access-control framework. It is the de-facto standard for securing Spring-based applications.

Spring Security is a framework that focuses on providing both authentication and authorization to Java applications. Like all Spring projects, the real power of Spring Security is found in how easily it can be extended to meet custom requirements

Spring Security是一个功能强大且高度可定制的身份验证和访问控制框架。它实际上是保护基于spring的应用程序的标准。

Spring Security是一个框架,侧重于为Java应用程序提供身份验证和授权。与所有Spring项目一样,Spring安全性的真正强大之处在于它可以轻松地扩展以满足定制需求

在用户认证方面,Spring Security 框架支持主流的认证方式,包括 HTTP 基本认证、HTTP 表单验证、HTTP 摘要认证、OpenID 和 LDAP 等。在用户授权方面,Spring Security 提供了基于角色的访问控制和访问控制列表(Access Control List,ACL),可以对应用中的领域对象进行细粒度的控制。

1.认识SpringSecurity

Spring Security 是针对Spring项目的安全框架,也是Spring Boot底层安全模块默认的技术选型,他可以实现强大的Web安全控制,对于安全控制,我们仅需要引入 spring-boot-starter-security 模块,进行少量的配置,即可实现强大的安全管理!

记住几个类:

  • WebSecurityConfigurerAdapter:自定义Security策略
  • AuthenticationManagerBuilder:自定义认证策略
  • @EnableWebSecurity:开启WebSecurity模式
    Spring Security的两个主要目标是 “认证” 和 “授权”(访问控制)。
    认证:就是给某个人赋予什么样的角色(名片)
    授权: 就是某个人(角色/名片)能行驶什么样的权力

“认证”(Authentication)

身份验证是关于验证您的凭据,如用户名/用户ID和密码,以验证您的身份。

身份验证通常通过用户名和密码完成,有时与身份验证因素结合使用。

“授权” (Authorization)

授权发生在系统成功验证您的身份后,最终会授予您访问资源(如信息,文件,数据库,资金,位置,几乎任何内容)的完全权限。

这个概念是通用的,而不是只在Spring Security 中存在。

2.实战使用

(1).搭建环境

1.我们首先导入静态资源

2.引入thymeleaf依赖需求

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
            <version>2.7.7</version>

3.设置路由转向Controller

  • 这里我们学习到一个新技术,就是我们可以使用ReusltFul风格对其页面数据进行跳转
@RequestMapping("/level1/{id}")
    public String toOne(@PathVariable("id") int id) {
        return "views/level1/"+id;
    }
package com.jsxs.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping({"/jsxs","/"})
public class RouterController {
    @RequestMapping({"/", "/index"})
    public String index() {
        return "index";
    }
    @RequestMapping("/toLogin")
    public String toLogin() {
        return "views/login";
    }
    //    vip1
//    这里我们使用几千前端传参实现对页面跳转的控制
    @RequestMapping("/level1/{id}")
    public String toOne(@PathVariable("id") int id) {
        return "views/level1/"+id;
    }
    //    这里我们使用几千前端传参实现对页面跳转的控制
    @RequestMapping("/level2/{id}")
    public String toTwo(@PathVariable("id") int id) {
        return "views/level2/"+id;
    }
    //    这里我们使用几千前端传参实现对页面跳转的控制
    @RequestMapping("/level3/{id}")
    public String toThree(@PathVariable("id") int id) {
        return "views/level3/"+id;
    }
}

(2).用户认证和授权

1.引入 SpringSecurity 依赖

<!--SpringSecurity -->
<dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-security</artifactId>
</dependency>

2.新建一个配置文件,并且继承 WebSecurityConfigurerAdapter,并且要添加@EnableWebSecurity注解 (授权)

授权

package com.jsxs.config;
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;
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
//    链式编程
    @Override
    protected void configure(HttpSecurity http) throws Exception {
//        首页所有人可以访问,但是功能页只有对应有权限的人才能访问
        http.authorizeRequests()
                .antMatchers("/").permitAll()
//                这里意思就是说: 在level1下的所有页面只有vip1才能进行访问
                .antMatchers("/level1/**").hasRole("vip1")
//                这里意思就是说: 在level2下的所有页面只有vip2才能进行访问
                .antMatchers("/level2/**").hasRole("vip2")
//                这里意思就是说: 在level3下的所有页面只有vip3才能进行访问
                .antMatchers("/level3/**").hasRole("vip3");
        super.configure(http);
    }
}

3.我们进行测试登入 如果我们没有权限就进入了登入页面。(系统自带非自写)

账户是: user 密码: 会显示在控制台

//        没有权限默认跳到登入页面
             http.formLogin();

4.输入账户密码正确无误后 会进入我们所需的页面

相关实践学习
消息队列+Serverless+Tablestore:实现高弹性的电商订单系统
基于消息队列以及函数计算,快速部署一个高弹性的商品订单系统,能够应对抢购场景下的高并发情况。
云安全基础课 - 访问控制概述
课程大纲 课程目标和内容介绍视频时长 访问控制概述视频时长 身份标识和认证技术视频时长 授权机制视频时长 访问控制的常见攻击视频时长
相关文章
|
5月前
springboot2.4.5使用fastjosn
springboot2.4.5使用fastjosn
|
Java Unix 调度
springboot快速整合任务
springboot快速整合任务
|
安全 前端开发 Java
89.【SpringBoot-02】(五)
89.【SpringBoot-02】
60 0
|
6月前
|
Java 程序员 应用服务中间件
Springboot整合Thmeleaf
Springboot整合Thmeleaf
|
Java 数据格式 微服务
springboot系列知识
Spring Boot都很熟悉了,再重新认识学习一遍。
79 0
|
JSON JavaScript Java
87.【SpringBoot-01】(七)
87.【SpringBoot-01】
58 0
|
前端开发 Java 容器
87.【SpringBoot-01】(十)
87.【SpringBoot-01】
34 0
|
Java 数据库连接 数据库
SpringBoot总结必知必会
SpringBoot总结必知必会
84 0
|
XML 运维 安全
springboot
springboot
98 0