欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

SpringBoot学习笔记(二)

程序员文章站 2022-05-03 13:09:08
...

SpringBoot自动装配

六:多环境配置

文件配置路径优先级如下:

  • file:./config/ (当前项目路径config目录下);
  • file:./ (当前项目路径下);
  • classpath:/config/ (resource路径config目录下)
  • classpath:/ (resource路径config下)默认

当有多个配置文件时需要在默认配置文件上如下配置

  • properties
#springboot的多环境配置,可以选择**哪一个配置文件,在此**application-dev.properties
spring.profiles.active=dev
  • yml可以实现多文档模块
server:
  port: 8080

spring:
  profiles:
    active: dev
---
server:
  port: 8081

spring:
  profiles: dev

七:SpringBoot Web开发

自动装配:

  • xxxxAutoConfiguration…向容器中自动装配组件
  • xxxProperties:自动配置类,装配配置文件中自定义的一些内容
  • 可以通过debug: true来查看哪些自动配置类生效,哪些没有生效

要解决的问题:

  1. 导入静态资源

    • webjars:以maven的方式引入webjars,然后在其jar包中写。localhost:8080/webjars/

      <dependency>
          <groupId>org.webjars.bower</groupId>
          <artifactId>jquery</artifactId>
          <version>3.4.1</version>
      </dependency>
      
    • ResourceProperties类定义的四个目录都会被/**接收,优先级2>3>4。localhost:8080/

      1. classpath:/META-INF/resources/
      2. classpath:/resources/
      3. classpath:/static/默认
      4. classpath:/public/
  2. 首页

    index.html,可放置在resourse中的public,resources, static中,亦可放置在templates中,templates类似web-info目录,需经过controller进入

  3. jsp,模板引擎

    jsp就是一个模板引擎,springboot推荐的模板引擎是Thymeleaf。

    • 引入:在springboot官网找到依赖加入pom文件中

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

      默认地址:截取的部分源码

      DEFAULT_PREFIX = "classpath:/templates/";
      DEFAULT_SUFFIX = ".html";
      
    • HTML文档:引入约束

      <!DOCTYPE HTML>
      <html xmlns:th="http://www.thymeleaf.org">
      
    • 相关语法:https://www.thymeleaf.org/doc/tutorials/3.0/usingthymeleaf.html#what-kind-of-templates-can-thymeleaf-process

  4. 装配和扩展springMVC

    Spring Boot为Spring MVC提供了自动配置,适用于大多数应用程序。如果你想保留Spring Boot MVC功能,并且你想添加额外的 MVC配置(拦截器,格式化程序,视图控制器和其他功能),你可以添加自己的@ConfigurationWebMvcConfigurer类但不要添加 @EnableWebMvc。如果您希望提供RequestMappingHandlerMappingRequestMappingHandlerAdapterExceptionHandlerExceptionResolver的自定义实例,则可以声明WebMvcRegistrationsAdapter实例以提供此类组件。

    如果您想完全控制Spring MVC,可以添加自己的@Configuration注释@EnableWebMvc

    //如果想要扩展一些定制化的功能,只要写需要定制的组件,然后将它交给springboot,springboot就会自动装配
    @Configuration
    public class MyMvcConfig implements WebMvcConfigurer {
    
        //public interface ViewResolver 实现了视图解析器接口的类,就可以看作视图解析器
        @Bean
        public ViewResolver myViewResolver(){
            return new MyViewResolver();
        }
        
        //自定义的视图解析器
        public static class MyViewResolver implements ViewResolver{
    
            @Override
            public View resolveViewName(String s, Locale locale) throws Exception {
                return null;
            }
        }
    }
    
    @Configuration
    public class MyMvcConfig implements WebMvcConfigurer {
    
        //视图跳转
        @Override
        public void addViewControllers(ViewControllerRegistry registry) {
            registry.addViewController("/kuang").setViewName("test");
        }
    }
    

    在springboot类中有非常多的xxxConfiguration,帮助我们进行扩展配置

  5. 增删改查
  6. 拦截器
  7. 国际化
    • 配置i18n.properties文件

SpringBoot学习笔记(二)

 ```HTML
 <h1 class="h3 mb-3 font-weight-normal" th:text="#{login.tip}">Please sign in</h1>
 ```

SpringBoot学习笔记(二)

  • 自定义组件。编写LocaleResolver类,并加载到MyWebConfig中

  • MyWebConfig
    
    @Bean
    public LocaleResolver localeResolver(){
        return new MyLocaleResolver();
    }
    
    public class MyLocaleResolver implements LocaleResolver {
        //解析请求
        @Override
        public Locale resolveLocale(HttpServletRequest httpServletRequest) {
            String language = httpServletRequest.getParameter("l");
            Locale locale = Locale.getDefault();
    
            //如果请求的连接携带了国际化的参数
            if (!StringUtils.isEmpty(language)){
                String[] split = language.split("_");
                locale = new Locale(split[0], split[1]);
            }
    
            return locale;
        }
    

八:JDBC封装

  1. 在IDEA中连接数据库,依次点击,选择数据库类型,输入用户名、密码,在schema中选择自己要用的数据库,即可出现下图所示

SpringBoot学习笔记(二)

  1. 在yml文件中进行如下配置

    spring:
      datasource:
        username: root
        password: a19941219
        url: jdbc:mysql://localhost:3306/student?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8
        driver-class-name: com.mysql.jdbc.Driver
    
  2. 使用JdbcTemplate进行操作即可。

九:自定义数据源DruidDataSource

  1. Druid 是阿里巴巴开源平台上一个数据库连接池实现, 结合了C3P0、DBCP等DB池的优点,同时加入了日志监控。Spring Boot2.0以上默认使用Hikari 数据源, 可以说Hikari 与Driud 都是当前Java Web 上最优秀的数据源.

  2. 引入数据源:

    <!--druid-->
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid</artifactId>
        <version>1.1.21</version>
    </dependency>
    
  3. yml配置

    spring:
      datasource:
        username: root
        password: a19941219
        url: jdbc:mysql://localhost:3306/student?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8
        driver-class-name: com.mysql.jdbc.Driver
        #设置druid
        type: com.alibaba.druid.pool.DruidDataSource
        #配置扩展插件 stat:监控统计;日志:log4j;防止SQL注入:wall
        filters: stat,wall,log4j
    
  • 设置druid监控

    @Configuration
    public class DruidConfig {
    
        //绑定yml文件
        @ConfigurationProperties(prefix = "spring.datasource")
        @Bean
        public DataSource druidDataSource(){
            return new DruidDataSource();
        }
    
        //后台监控,类似web.xml, ServletRegistrationBean
        //因为springboot内置了servlet容器,所以没有web.xml,替代方法:使用ServletRegistrationBean注入
        @Bean
        public ServletRegistrationBean a(){
            ServletRegistrationBean<StatViewServlet> bean = new ServletRegistrationBean<>(new StatViewServlet(), "/druid/*");
    
            //后台需要有人登陆,账号密码
            HashMap<String, String> initParameters = new HashMap<>();
            //增加配置
            initParameters.put("loginUsername", "admin");
            initParameters.put("loginPassword", "123456");
    
            //允许谁可以访问:若为空,都可以访问;若为localhost,只能本机访问
            initParameters.put("allow", "");
    
            bean.setInitParameters(initParameters);//设置初始化参数
            return  bean;
        }
    }
    
  • 设置过滤器

    @Bean
    public FilterRegistrationBean webStatFilter(){
        FilterRegistrationBean bean = new FilterRegistrationBean();
        bean.setFilter(new WebStatFilter());
        //设置过滤请求
        HashMap<String, String> initParameters = new HashMap<>();
        //不设置过滤
        initParameters.put("exclusions", "*.js, *.css, /druid/*");
        bean.setInitParameters(initParameters);
        return bean;
    }
    

十:整合Mybatis

  1. 引入

    <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
        <version>2.1.2</version>
    </dependency>
    
  2. 配置

    • pojo

      @Data
      @NoArgsConstructor
      @AllArgsConstructor
      public class User {
          private Integer id;
          private String name;
          private Integer age;
      }
      
    • mapper

      @Mapper
      public interface UserMapper {
      
          List<User> getAllUsers();
      }
      
    • mapper.xml放在resouces/mybatis/mapper里

      <?xml version="1.0" encoding="UTF-8" ?>
      <!DOCTYPE mapper
              PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
              "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
      <mapper namespace="com.kuang.mapper.UserMapper">
          <select id="getAllUsers" resultType="User">
          select * from 
        </select>
      </mapper>
      
    • yml配置

      spring:
        datasource:
          username: root
          password: a19941219
          url: jdbc:mysql://localhost:3306/student?serverTimezone=UTC&amp;useUnicode=true&amp;characterEncoding=utf-8
          driver-class-name: com.mysql.jdbc.Driver
      #核心配置
      mybatis:
        type-aliases-package: com.kuang.pojo
        mapper-locations: classpath:mybatis/mapper/*.xmlshi
      

十一:SpringSecurity入门

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

  1. 权限分类

    • 功能权限
    • 访问权限
    • 菜单权限
    • 拦截器,过滤器
  2. 配置

    • 引入

      <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-security</artifactId>
      </dependency>
      
  3. 认证与授权

    @EnableWebSecurity
    public class SecurityConfig extends WebSecurityConfigurerAdapter {
    
        //授权  链式编程
        @Override
        protected void configure(HttpSecurity http) throws Exception {
            //请求授权的规则
            http.authorizeRequests().antMatchers("/").permitAll()
                    .antMatchers("/level1/**").hasRole("vip1")
                    .antMatchers("/level2/**").hasRole("vip2")
                    .antMatchers("/level3/**").hasRole("vip3");
            //没有权限默认到登陆页面
            http.formLogin();
    
        }
    
        //认证
        5.0+新增了许多加密方法,需要对密码进行加密
        @Override
        protected void configure(AuthenticationManagerBuilder auth) throws Exception {
    
            //正常应从数据库读取
            auth.inMemoryAuthentication().passwordEncoder(new BCryptPasswordEncoder())
                    .withUser("kuangshen").password(new BCryptPasswordEncoder().encode("123456")).roles("vip2", "vip3")
                    .and()
                    .withUser("root").password(new BCryptPasswordEncoder().encode("123456")).roles("vip1", "vip2", "vip3");
        }
    }
    
  4. 注销

    //注销
    http.csrf().disable();//关闭csrf功能,登陆失败可能存在的原因,防止网站攻击
    http.logout().logoutSuccessUrl("/");
    
    *The default is that accessing the URL
    * "/logout" will log the user out by invalidating the HTTP Session,
    
  5. 权限控制,thymeleaf与springsecurity整合

    • 引入

      <dependency>
          <groupId>org.thymeleaf.extras</groupId>
          <artifactId>thymeleaf-extras-springsecurity5</artifactId>
      </dependency>
      
    • html

      xmlns:sec=“http://www.thymeleaf.org/thymeleaf-extras-springsecurity5”>
      
      • sec:authorize="!isAuthenticated()"
      • sec:authorize=“hasRole()”
      <!--根据角色动态实现-->
      <div class="column" sec:authorize="hasRole('vip1')">
      
    • 登陆页面

      //没有权限默认到登陆页面
      http.formLogin()
              .usernameParameter("userName")//默认:username
              .passwordParameter("pwd")//默认:password
              .loginPage("")//加载登陆页面
              .loginProcessingUrl("");//加载登陆成功页面
      
    • 记住我

      //开启记住我 cookie
      http.rememberMe().rememberMeParameter("remeber");
      

f-extras-springsecurity5

```

  • html

    xmlns:sec=“http://www.thymeleaf.org/thymeleaf-extras-springsecurity5”>
    
    • sec:authorize="!isAuthenticated()"
    • sec:authorize=“hasRole()”
    <!--根据角色动态实现-->
    <div class="column" sec:authorize="hasRole('vip1')">
    
  • 登陆页面

    //没有权限默认到登陆页面
    http.formLogin()
            .usernameParameter("userName")//默认:username
            .passwordParameter("pwd")//默认:password
            .loginPage("")//加载登陆页面
            .loginProcessingUrl("");//加载登陆成功页面
    
  • 记住我

    //开启记住我 cookie
    http.rememberMe().rememberMeParameter("remeber");