SpringBoot整合JDBC
创建springBoot项目时首先需要导入JDBC的支持,以及MySQL驱动
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<!-- mysql驱动 -->
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<scope>runtime</scope>
</dependency>
配置yaml文件的数据源链接
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
username: root
password: 123456
url: jdbc:mysql://localhost:3306/sqltest?useSSL=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
这里使用的是springBoot默认的数据源HikariDataSource,当然也可以继续使用其他扩展配置的数据源比如druid
springBoot内置各种组件,每个组件都有一个对应的原型Template类,我们可以通过该template类去调用对应的方法。并且spring会将该template进行自动装配
@Autowired // 自动装配bean:JdbcTemplate
private JdbcTemplate jdbcTemplate;
@GetMapping(value = "/userList")
@ResponseBody // 返回值不走视图解析器 直接打印在视图
public List<Map<String,Object>> getBooks(){
String sql = "select * from sqltest.books";
List<Map<String, Object>> maps = jdbcTemplate.queryForList(sql);
return maps;
}
整合Druid数据源
springBoot提供的数据源HikariDataSource是目前主流数据源中速度最快的,而Druid的优势就在于它拥有日志监控功能,通过访问监控页面,我们可以实时的看到执行了哪些sql、执行细节、执行时间、以及查看数据源信息等等
首先导入Druid数据源依赖,要想使用Druid的日志监控功能也还需要导入log4j日志依赖,两种方式。第一种是导入原生的Druid依赖,不依赖于SpringBoot。但是现在SpringBoot已经提供了对Druid的支持,所以可以使用第二种,依赖如下
<!-- 配置springBoot支持的druid数据源 以及log4j日志 -->
<!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.22</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
去SpringBoot配置文件中配置Druid的参数
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
username: root
password: 123456
url: jdbc:mysql://localhost:3306/sqltest?useSSL=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
type: com.alibaba.druid.pool.DruidDataSource
# springBoot默认不会配置以下属性值 需要手动绑定
# druid 数据源专有配置
initial-size: 5
min-idle: 5
max-active: 20
max-wait: 60000
time-between-eviction-runs-millis: 60000
min-evictable-idle-time-millis: 300000
validation-query: SELECT 1 FROM DUAL
test-while-idle: true
test-on-borrow: false
test-on-return: false
pool-prepared-statements: true
#配置监控统计拦截的filters stat:监控统计、log4j日志记录 wall防御sql注入
filters: stat,wall,log4j
max-pool-prepared-statement-per-connection-size: 20
use-global-data-source-stat: true
connection-properties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500
创建Druid配置类
@Configuration
public class DruidConfig {
@Bean
@ConfigurationProperties(prefix = "spring.datasource")
public DataSource druid(){
return new DruidDataSource();
}
// 配置druid监控
@Bean
public ServletRegistrationBean statViewServlet(){
ServletRegistrationBean<StatViewServlet> bean = new ServletRegistrationBean<>(new StatViewServlet(),"/druid/*");
// 配置druid登录监控界面的用户名和密码
HashMap<String, String> initParam = new HashMap<>();
initParam.put("loginUsername","root");
initParam.put("loginPassword","123456");
// 访问权限控制
//后台允许谁可以访问
//initParams.put("allow", "localhost"):表示只有本机可以访问
//initParams.put("allow", ""):为空或者为null时,表示允许所有访问
initParam.put("allow","");
//deny:Druid 后台拒绝谁访问
// initParams.put("msb", "192.168.1.20");//表示禁止此ip访问
// 初始化参数
bean.setInitParameters(initParam);
return bean;
}
@Bean
public FilterRegistrationBean webStatFilter(){
FilterRegistrationBean bean = new FilterRegistrationBean();
bean.setFilter(new WebStatFilter());
HashMap<String, Object> initParams = new HashMap<>();
// 这些请求 不进行监控统计
initParams.put("exclusions","*.js,*.css,/druid/*");
bean.setInitParameters(initParams);
return bean;
}
}
整合MyBatis
导入依赖,mybatis提供了与springBoot整合的依赖资源,导入在Pom.xml文件中即可
<!-- springBoot整合mybatis依赖 -->
<!-- https://mvnrepository.com/artifact/org.mybatis.spring.boot/mybatis-spring-boot-starter -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.3</version>
</dependency>
配置yaml文件,可以在yaml中绑定mybatis的核心配置文件、以及绑定mapper.xml的文件路径,和别名设置等
mybatis:
type-aliases-package: com.yuqu.springboot02.pojo
mapper-locations: classpath:mybatis/mapper/*.xml
mapper层
@Mapper // 表示将该接口注册为bean托管给spring容器
@Repository
public interface BookMapper {
也可以替换@Mapper为@MapperScan()设置扫描参数,扫描到的接口将会统一注册给spring管理
SpringSecurity
是一款基于Spring的安全框架,与shiro同是主流的安全性框架。使用springSecurity可以高效的针对“认证”和“权限”进行控制。所以springSecurity的两大核心就是用户认证Authentication和用户授权Authorization。
事实上,我们可以在不适用任何安全框架的情况下也可以实现对用户的认证和权限控制,比如拦截器。但是相对而言没有使用框架的可扩展性更高,并且使用更加方便。springsecurity已经封装好了大量的认证授权API供开发使用,我们只需要引入一个依赖即可
- 在创建的SpringBoot项目中引入springsecurity依赖即可
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
- 创建springSecurity配置类继承WebSecurityConfigurerAdapter,然后重写管理认证方法和授权方法
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
// 授权 参数为http 多针对请求过滤 为不同角色配置不同的访问权限
@Override
protected void configure(HttpSecurity http) throws Exception {
// 首页所有人可以访问
// 功能也仅对应身份可以访问
http.authorizeRequests()
.antMatchers("/").permitAll()
.antMatchers("/toLevel1/**").hasRole("vip1")
.antMatchers("/toLevel2/**").hasRole("vip2")
.antMatchers("/toLevel3/**").hasRole("vip3");
// 没有权限自动跳转登录页 loginPage定制登录页面 loginProcessingUrl登录认证页面
http.formLogin().loginPage("/toLogin").loginProcessingUrl("/login");
// 开启注销功能 指定注销成功跳转页面
http.logout().logoutSuccessUrl("/");
// 開啓記住我功能 利用cookie實現 默認存活时间两周
http.rememberMe().rememberMeParameter("remember");
// 禁止csrf 跨站请求保护
// SpringSecurity默认开启了CSRF防止网站攻击 会导致logout出现404因为logout为get请求
// 可以将请求方式改为post即可 或者关闭csrf
http.csrf().disable();
}
// 认证
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
System.out.println("查看是否生效");
auth.inMemoryAuthentication().passwordEncoder(new BCryptPasswordEncoder())
.withUser("root").password(new BCryptPasswordEncoder().encode("123456")).roles("vip1","vip2")
.and().withUser("gppp").password(new BCryptPasswordEncoder().encode("123456")).roles("vip1");
//There is no PasswordEncoder mapped for the id "null"
// 需要设置密码加密
System.out.println("很好,,,生效了");
}
}
springsecurity也可以与thymeleaf进行整合进行功能扩展,需要导入两者整合的依赖,但是各个版本可能会存在不一样的问题。