Spring Boot基础知识点
一. 配置文件:
-
支持properties和yaml两种格式,两个默认文件是application.properties和application.yaml,同时存在则application.propesties中定义的属性优先使用。
-
读取单个配置项:@Value("${neo.title}")。
-
读取多个配置项:@ConfigurationProperties(prefix=“neo”),表示以 neo 开头的属性会自动赋值到对象的属性中,比如,neo.title 会自动赋值到对象属性 title 中。
-
自定义配置文件:@PropertySource(“classpath:other.properties”)
@Component
@ConfigurationProperties(prefix="neo")
public class NeoProperties {
private String title;
private String description;
//省略getter settet方法
}
二. Filter(过滤器):
-
定义:可以在前端拦截所有用户的请求,可以认为是 Servlet 的一种加强版,Web 开发人员通过 Filter 技术,对 Web 服务器管理的所有 Web 资源,例如 JSP、Servlet、静态图片文件或静态 HTML 文件等进行拦截,从而实现一些特殊的功能。例如,实现 URL 级别的权限访问控制、过滤敏感词汇、排除有 XSS 威胁的字符、记录请求日志等一些高级功能。
-
自定义Filter:第一种是使用 @WebFilter,第二种是使用 FilterRegistrationBean,推荐使用第二种。
-
步骤:
实现 Filter 接口,实现其中的 doFilter() 方法;
添加 @Configuration 注解,将自定义 Filter 加入过滤链。 -
优先级问题:当有多个过滤器时可以通过设置 Order 属性来决定它们的执行顺序,Order 值越小优先级越高。
-
代码示例:
自定义的Filter:
public class MyFilter implements Filter {
@Override
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub
}
@Override
public void doFilter(ServletRequest srequest, ServletResponse sresponse, FilterChain filterChain)
throws IOException, ServletException {
// TODO Auto-generated method stub
HttpServletRequest request = (HttpServletRequest) srequest;
System.out.println("this is MyFilter,url :"+request.getRequestURI());
filterChain.doFilter(srequest, sresponse);
}
@Override
public void destroy() {
// TODO Auto-generated method stub
}
}
将自定义 Filter 加入过滤链:
@Configuration
public class WebConfiguration {
@Bean
public FilterRegistrationBean testFilterRegistration() {
FilterRegistrationBean registration = new FilterRegistrationBean();
registration.setFilter(new MyFilter());
registration.addUrlPatterns("/*");
registration.setName("MyFilter");
registration.setOrder(6);
return registration;
}
}
三. 数据校验:
-
在 Spring MVC 中有两种方式可以验证输入:
一种是 Spring 自带的验证框架,另外一种是利用 JSR 实现,Hibernate Validator 就是 JSR 规范的具体实现。 -
@Valid注解:参数前面添加,代表此对象使用了参数校验。
-
使用示例:
首先在 WebController 添加一个保存的方法 saveUser,参数为 User。BindingResult 参数校验的结果会存储在此对象中,可以根据属性判断是否校验通过,校验不通过可以将错误信息打印出来。
@RequestMapping("/saveUser")
public void saveUser(@Valid User user,BindingResult result) {
System.out.println("user:"+user);
if(result.hasErrors()) {
List<ObjectError> list = result.getAllErrors();
for (ObjectError error : list) {
System.out.println(error.getCode()+ "-" + error.getDefaultMessage());
}
}
}
接下来在 User 中给需要校验的参数添加对应的注解,对不同的属性,按照规则添加不同的校验内容。
public class User {
@NotEmpty(message="姓名不能为空")
private String name;
@Max(value = 100, message = "年龄不能大于100岁")
@Min(value= 18 ,message= "必须年满18岁!" )
private int age;
@NotEmpty(message="密码不能为空")
@Length(min=6,message="密码长度不能小于6位")
private String pass;
//...
}