SpringBoot学习笔记(二)
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
来查看哪些自动配置类生效,哪些没有生效
要解决的问题:
-
导入静态资源
-
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/
classpath:/META-INF/resources/
classpath:/resources/
-
classpath:/static/
默认 classpath:/public/
-
-
首页
index.html,可放置在resourse中的public,resources, static中,亦可放置在templates中,templates类似web-info目录,需经过controller进入
-
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
-
-
装配和扩展springMVC
Spring Boot为Spring MVC提供了自动配置,适用于大多数应用程序。如果你想保留Spring Boot MVC功能,并且你想添加额外的 MVC配置(拦截器,格式化程序,视图控制器和其他功能),你可以添加自己的
@Configuration
类WebMvcConfigurer
类但不要添加@EnableWebMvc
。如果您希望提供RequestMappingHandlerMapping
,RequestMappingHandlerAdapter
或ExceptionHandlerExceptionResolver
的自定义实例,则可以声明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,帮助我们进行扩展配置
-
增删改查
-
拦截器
-
国际化
- 配置i18n.properties文件
```HTML
<h1 class="h3 mb-3 font-weight-normal" th:text="#{login.tip}">Please sign in</h1>
```
-
自定义组件。编写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封装
- 在IDEA中连接数据库,依次点击,选择数据库类型,输入用户名、密码,在schema中选择自己要用的数据库,即可出现下图所示
-
在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
-
使用JdbcTemplate进行操作即可。
九:自定义数据源DruidDataSource
-
Druid 是阿里巴巴开源平台上一个数据库连接池实现, 结合了C3P0、DBCP等DB池的优点,同时加入了日志监控。Spring Boot2.0以上默认使用Hikari 数据源, 可以说Hikari 与Driud 都是当前Java Web 上最优秀的数据源.
-
引入数据源:
<!--druid--> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.21</version> </dependency>
-
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
-
引入
<dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.1.2</version> </dependency>
-
配置
-
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&useUnicode=true&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的应用程序的实际标准。
-
权限分类
- 功能权限
- 访问权限
- 菜单权限
- 拦截器,过滤器
-
配置
-
引入
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency>
-
-
认证与授权
@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"); } }
-
注销
//注销 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,
-
权限控制,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");