1.Shiro
realms,users,roles,permissions
Factory
SecurityManager
SecurityUtils.setSecurityManager(securityManager);
//获取当前的用户对象Subject
Subject current = SecurityUtils.getSubject();
//判断当前用户是否被认证
current.isAuthenticated()
UsernamePassword token
token.setRememberMe(true);
//执行登录 *** 作
current.login(token);
current.getPrincipal
hasRole isPermitted
//注销
current.logout()
2.swagger
在项目中使用Swagger 需要Springbox
swagger2、UI
测试运行 http://localhost:8080/swagger-ui.html
3.配置Swagger
Swagger的bean实例Docket;
4.spring boot2.6.1 继承swagger报错:
swagger Failed to start bean 'documentationPluginsBootstrapper'; nested exception is java.lang.NullPointerException
因为Springfox使用的路径匹配是基于AntPathMatcher的,而Spring Boot 2.6.X使用的是PathPatternMatcher。
解决办法,修改application.yaml
spring.mvc.pathmatch.matching-strategy=ant_path_matcher
AntPathMatcher进行的是纯字符串 *** 作和比对
而PathPattern则对于任何一个字符串的pattern最终都会被解析为若干段的PathElement,
这些PathElement以链式结构连接起来用以表示该pattern,形成一个对象数据,
5./* 是拦截所有的文件夹,不包含子文件夹
/** 是拦截所有的文件夹及里面的子文件夹
6.Swagger配置扫描jiek
Docket.select()
7. return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.select()
//RequestHandlerSelectors 配置要扫描接口的方式
//basePackage 指定要扫描的包
//any() 扫描全部
//none() 不扫描
//withClassAnnotation 扫描类上的注解,参数是一个注解的反射对象
//withMethodAnnotation 扫描方法上的注解
.apis(RequestHandlerSelectors.basePackage("com.tjut.controller"))
//paths 过滤什么路径
.paths(PathSelectors.ant("/tjut/**"))
.build(); //build工厂模式
8.配置是否启动Swagger
.enable(true)
9.希望Swagger在生产环境中使用,在发布的时候不使用
判断是不是生产环境 : flag=false
.enbale(flag)
//设置要显示的Swagger环境
Profiles profiles = Profiles.of("dev","test");
//获取项目的环境
//通过environment.acceptsProfiles判断是否处在自己设定的环境当中
boolean flag = environment.acceptsProfiles(profiles);
10.配置API文档的分组
.groupName("A")
配置多个分组
多个Docket实例即可
11.实体类配置
@ApiModel("用户实体类") 用在实体类中
@ApiModelProperty("密码") 用在实体类的属性上
@ApiOperation("hello 控制类") 放在类的方法上
@ApiParam("用户名") 给方法的参数加注释
总结:
我们可以通过Swagger给一些比较难理解的属性或者接口,增加注释信息
接口文档实时更新
可以在线测试
12.异步任务 @Async @EnableAsync
邮件任务
定时执行任务
13.定时执行任务
TaskScheduler 任务调度者
TaskExecutor 任务执行者
@EnableScheduleing 开启定时功能的注解
@scheduled 什么执行
Cron 表达式
14.springboot + redis
SpringBoot *** 作数据 :spring-data jpa jdbc mongodb redis
SpringData 也是和SpringBoot 齐名的项目
说明: 在SpringBoot2.x 之后,原来使用的 jedis 被替换为lettuce
jedis : 采用的直连,多个线程 *** 作的话,是不安全的,如果想要避免不安全的,使用 jedis pool 连接池! BIO
lettuce: 采用netty ,实例可以在多个线程中进行共享,不存在线程不安全的情况,可以减少线程数据,更像 Nio 模式。
源码分析
@Bean
@ConditionalOnMissingBean(name="redisTemplate") //我们可以自己定义一个redisTemplate来替换这个默认的
public RedisTemplate
19.druid开启监控模式
@Configuration
public class DruidConfig {
@ConfigurationProperties(prefix = "spring.datasource")
@Bean
public DataSource druidDataSource(){
return new DruidDataSource();
}
//后台监控 : web.xml ServletRegistrationBean
//Springboot 内置了 servlet 容器,没有web.xml ,替代方法ServletRegistrationBean
@Bean
public ServletRegistrationBean a(){
//模板是死的
ServletRegistrationBean bean = new ServletRegistrationBean<>(new StatViewServlet(),"/druid/*");
//后台需要有人登录,账号密码配置
HashMap initParameters = new HashMap<>();
//增加配置
initParameters.put("loginUsername","admin"); //登陆key是固定的 loginUsername loginPassword
initParameters.put("loginPassword","123456");
//允许谁可以访问
initParameters.put("allow","");
/*//禁止谁能访问
initParameters.put("kua","192.168.1.2");*/
bean.setInitParameters(initParameters);//设置初始化参数
return bean;
}
//filter
@Bean
public FilterRegistrationBean webStatFilter(){
FilterRegistrationBean bean = new FilterRegistrationBean();
bean.setFilter(new WebStatFilter());
//过滤请求
Map initParameters = new HashMap<>();
//这些东西不进行统计
initParameters.put("exclusions","*.js,*.css,/druid/*");
bean.setInitParameters(initParameters);
return bean;
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)