实用配置:
-
MybatisConfig.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <!--日志打印--> <settings> <setting name="logImpl" value="STDOUT_LOGGING" /> </settings> </configuration>
-
damo.xml
<?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="demo"> </mapper>
SpringBoot
各文件作用
完整的配置信息
server:
port: 8080
servlet:
context-path: /gok
spring:
datasource:
username: root
password: 123456
url: jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC&nullCatalogMeansCurrent=true
driver-class-name: com.mysql.jdbc.Driver
thymeleaf:
prefix: classpath:/templates/
suffix: .html
# 文件上传配置
servlet:
multipart:
enabled: true
max-request-size: 10MB
max-file-size: 10MB
mybatis:
mapper-locations: classpath:/mappers/*.xml
logging:
level:
com.example.demo.daos: debug
配置启动界面baner
-
在resources下创建banner.txt
-
[字符网站]: (http://patorjk.com/software/taag/#p=display&f=3D%20Diagonal&t=D%20S%20K “字符网站”
Application Version: ${ruoyi.version}
Spring Boot Version: ${spring-boot.version}
// _ooOoo_ //
// o8888888o //
// 88" . "88 //
// (| ^_^ |) //
// O\ = /O //
// ____/`---'\____ //
// .' \\| |// `. //
// / \\||| : |||// \ //
// / _||||| -:- |||||- \ //
// | | \\\ - /// | | //
// | \_| ''\---/'' | | //
// \ .-\__ `-` ___/-. / //
// ___`. .' /--.--\ `. . ___ //
// ."" '< `.___\_<|>_/___.' >'"". //
// | | : `- \`.;`\ _ /`;.`/ - ` : | | //
// \ \ `-. \_ __\ /__ _/ .-` / / //
// ========`-.____`-.___\_____/___.-`____.-'======== //
// `=---=' //
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ //
// 佛祖保佑 永不宕机 永无BUG //
配置favicon
-
创建favicon.ico (图标名不能变) 放置在类路径根目录
META-INF/resources/ public/ static/
-
在线生成网址:
热部署
- 引入依赖(创建SpringBoot时可以勾选该模块)
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
-
IDEA设置
进入设置setting,Build,Execut, Deployment -> Compiler 勾选右侧的Build Project automatically
开启项目运行时自动build,在打开的页面上快捷键ctrl + shift + a 搜索命令:registry –> 勾选compiler.automake.allow.when.app.running*
或者:开启idea自动make功能
CTRL + SHIFT + A --> 查找make project automatically --> 选中
CTRL + SHIFT + A --> 查找Registry --> 找到并勾选compiler.automake.allow.when.app.running
多环境配置
-
不同环境
- application-dev.yml(开发环境)
- application-test.yml(测试环境)
- application-uat.yml(预发布)
- application-pro.yml(生产环境)
-
环境更改:application.yml
spring: profiles: active: dev
拦截器使用
-
类编写Ecoding:
public class Ecoding implements HandlerInterceptor
-
MyWebAppConfig
@Configuration public class MyWebAppConfig implements WebMvcConfigurer { @Override public void addInterceptors(InterceptorRegistry registry) { WebMvcConfigurer.super.addInterceptors(registry); registry.addInterceptor(new UserFilter()).addPathPatterns("/**"); String[] excludePath={"/common/**","/index.html"}; registry.addInterceptor(new UserFilter()).excludePathPatterns(excludePath); } }
Mybatis的使用
@Insert("insert into user (name,psw) values(#{name},#{psw})")
@Options(useGeneratedKeys = true,keyProperty = "id")
public int addUser(User user);
自定义数据源配置
@Configuration
public class MultipleDBConfig {
@Bean(name ="mysqlDB")
public DataSource Mysql(){
DruidDataSource dataSource=new DruidDataSource();
dataSource.setUrl("jdbc:mysql://localhost:3306/ee_boot");
dataSource.setUsername("root");
dataSource.setPassword("123456");
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
return dataSource;
}
@Bean(name ="mysqltest")
@Primary //默认数据源
public DataSource Mysqltest(){
DruidDataSource dataSource=new DruidDataSource();
dataSource.setUrl("jdbc:mysql://localhost:3306/test");
dataSource.setUsername("root");
dataSource.setPassword("123456");
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
return dataSource;
}
}
配置Secrity
-
常见异常
- UsernameNotFoundException(用户不存在)
- DisabledException(用户已被禁用)
- BadCredentialsException(坏的凭据)
- LockedException(账户锁定)
- AccountExpiredException (账户过期)
- CredentialsExpiredException(证书过期)
-
Secrity配置文件
@Configuration public class SecrityConfig extends WebSecurityConfigurerAdapter { @Autowired private SecurityService securityService; @Autowired private MyPasswordEncoder myPasswordEncoder; /* *注意:此处可以不用配置securityService、myPasswordEncoder只要有在Spring容器里,Secrity会自动使用 * */ // @Override // protected void configure(AuthenticationManagerBuilder auth) throws Exception { // auth.userDetailsService(securityService).passwordEncoder(myPasswordEncoder); // } /* * 拦截器设置 * */ @Override protected void configure(HttpSecurity http) throws Exception { http. csrf()//跨站 .disable();//关闭跨站检测 http.authorizeRequests()验证策略策略链 .antMatchers("/public/**").permitAll()//无需验证的路径 .antMatchers("/login","/regist")//登录注册界面不需要权限 .permitAll()//允许通过 .anyRequest().authenticated()//所有请求需认证 .and() .formLogin() .loginPage("/login.html")//登录页面 // .failureUrl("")//自定义失败处理 .permitAll();//定制登录行为,登录页面可任意访问 // .and() // .logout() // .logoutUrl("/login.html") // .permitAll();//定制注销行为,注销请求可任意访问 // 允许ifram调用 http.headers().frameOptions().sameOrigin(); } }
-
MyPasswordEncoder:密码加密配置文件
@Component public class MyPasswordEncoder implements PasswordEncoder { /* * 加密规则:此处没有加密(可以人为加密后传入) * */ @Override public String encode(CharSequence charSequence) { System.out.println("encode: "+charSequence); return charSequence.toString(); } //判断密码是否匹配 @Override public boolean matches(CharSequence charSequence, String s) { System.out.println("前端传过来的密码:"+charSequence); System.out.println("后台保存的密码:"+s); System.out.println("加密:"+this.encode(charSequence)); return s.equals(this.encode(charSequence)); } }
-
SecurityService文件 这里可以结合原来的DAO和SecurityUser
@Component public class SecurityService implements UserDetailsService { @Override public UserDetails loadUserByUsername(String s) throws UsernameNotFoundException { /* * 数据库查询用户名和密码 * */ User user=new User(); user.setId("12345"); user.setName("123"); user.setPsw("123456"); //设置用户 SecurityUser securityUser=new SecurityUser(user.getPsw(),user.getId()); /* * 获取用户权限 * */ List<GrantedAuthority> authorities = new ArrayList<>(); // authorities.add(new Gr) // securityUser.setAuthorities(authorities); return securityUser; } }
-
SecurityUser
/** * @Author: Daiven * @Date: 2019/11/9 16:53 * @Version 1.0 * @描述:定义用户和角色 * UserDetails => Spring Security基础接口,包含某个用户的账号,密码,权限,状态(是否锁定)等信息。只有getter方法。 * Authentication => 认证对象,认证开始时创建,认证成功后存储于SecurityContext * principal => 用户信息对象,是一个Object,通常可转为UserDetails */ public class SecurityUser implements UserDetails { private String password; private String name; List<GrantedAuthority> authorities; public SecurityUser(String password, String name) { this.password = password; this.name = name; } /* * 设置权限 * */ public void setAuthorities(List<GrantedAuthority> authorities) { this.authorities = authorities; } /* *获得权限 * */ @Override public Collection<? extends GrantedAuthority> getAuthorities() { return this.authorities; } /* * 获取密码 * */ @Override public String getPassword() { System.out.println("调用获得密码!"); return name; } /* * 获取用户名 * */ @Override public String getUsername() { System.out.println("调用获得用户名!"); return this.password; } /* * 账户是否过期 *true:没有失效 *false:失效 * */ @Override public boolean isAccountNonExpired() { return false; } /* * 帐户是否被冻结 *false:被冻结 *true:没有被冻结 * */ @Override public boolean isAccountNonLocked() { return false; } /* * 帐户密码是否过期,一般有的密码要求性高的系统会使用到, * 比较每隔一段时间就要求用户重置密码 *false:过期 *true:没过期 * */ @Override public boolean isCredentialsNonExpired() { return false; } /* * 帐号是否可用 *true:可用 *false:不可用 * */ @Override public boolean isEnabled() { return false; } }
-
获得secrity相关数据
- 获得权限
@GetMapping("/index") public String toIndex(Authentication authentication){ List<GrantedAuthority> authorities= (List<GrantedAuthority>) authentication.getAuthorities(); for (GrantedAuthority authority : authorities) { System.out.println(authority.getAuthority()); } return "index"; }
SpringBoot内置定时器
-
启动类上添加注解
@SpringBootApplication @EnableScheduling public class SpringbootQuartzApplication { }
-
表达式生成地址
-
创建定时执行的任务类(两种方式)
-
方式一:
@Component public class Sch
-