springboot学习笔记2(拦截器,redis,授权登录,读取yml配置文件)
2017-05-30 00:00
609 查看
摘要: 自定义配置:拦截器,redisTemplate。登录管理,读取配置文件
介绍一下springboot的一些自定义配置。自定义配置前,需要加入一些依赖,在学习笔记1中都要介绍
1.使用springboot自定义拦截器。
首先自己一个拦截器:
然后创建一个类继承 WebMvcConfigurerAdapter。
2.配置redistemplate
在使用redis 保存key会产生 \xac\xed\x00\x05t\x00这样的乱码,这是因为springboot中默认redistemplate使用的序列化key类不是StringRedisSerializer(),需要我们自己配置一下:
或者(@Configuration + @Bean 注解组合 等价于 xml配置 )
我们配置的redistemplate bean会替换springboot默认创建的redistemplate。 这样直接调用redisTemplate,就会看到可以的乱码问题已经解决。但当我们通过redis-cli查看时,会发现中文value值显示也乱码,通过redis-cli --raw 进入cli,然后查看值就可解决显示问题,该方法值适用于linux系统,windows系统还是会乱码。
3.登陆授权配置:
对于有的web项目,需要用户登录才能授权访问,可以通过以下配置实现用户登录授权:
以上配置,会跳转到springboot的默认登陆页面,这种默认页面,缺少样式,不美观。如果需要自定义登陆,只需要Controller写一个处理方法(例如:“/tologin”),然后在在上述类上追加formLogin().loginPage("/tologin”)即可。用户访问的时候,会跳转到自己定义的处理方法。
4.获取配置文件属性:
springboot 提供一个工具类可以加载application.yml中的配置文件,如果要读取application.yml 以下参数:
首先要自定义个一个类,做如下设置。
然后在使用的地方依赖注入:
介绍一下springboot的一些自定义配置。自定义配置前,需要加入一些依赖,在学习笔记1中都要介绍
1.使用springboot自定义拦截器。
首先自己一个拦截器:
public class MyInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println("interceptor is working now----"); return true; } 。。。。。省略其它 }
然后创建一个类继承 WebMvcConfigurerAdapter。
@Configuration public class WebMvcConfigurer extends WebMvcConfigurerAdapter { @Override public void addInterceptors(InterceptorRegistry registry) { //添加自定义拦截器,设置路径 registry.addInterceptor(new CustomizeInterceptor()).addPathPatterns("/test/**"); super.addInterceptors(registry); } }
2.配置redistemplate
在使用redis 保存key会产生 \xac\xed\x00\x05t\x00这样的乱码,这是因为springboot中默认redistemplate使用的序列化key类不是StringRedisSerializer(),需要我们自己配置一下:
public static RedisTemplate<String, String> redisTemplate; @Autowired public RedisConfigurer(RedisTemplate redisTemplate) { redisTemplate.setKeySerializer(new StringRedisSerializer()); redisTemplate.setValueSerializer(new StringRedisSerializer()); this.redisTemplate = redisTemplate; }
或者(@Configuration + @Bean 注解组合 等价于 xml配置 )
@Configuration public class RedisTemplateUtil { @Bean public RedisTemplate<String, String> getRedisTemplate( RedisTemplate redisTemplate) { redisTemplate.setKeySerializer(new StringRedisSerializer()); redisTemplate.setValueSerializer(new StringRedisSerializer()); redisTemplate.setConnectionFactory(getFactory()); return redisTemplate; } }
我们配置的redistemplate bean会替换springboot默认创建的redistemplate。 这样直接调用redisTemplate,就会看到可以的乱码问题已经解决。但当我们通过redis-cli查看时,会发现中文value值显示也乱码,通过redis-cli --raw 进入cli,然后查看值就可解决显示问题,该方法值适用于linux系统,windows系统还是会乱码。
3.登陆授权配置:
对于有的web项目,需要用户登录才能授权访问,可以通过以下配置实现用户登录授权:
@EnableWebSecurity public class SecurityConfigurer extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { //指定路径需要登录权限,对静态资源放行,无需授权即可访问 http.authorizeRequests().antMatchers("/css/**", "/js/**", "/images/**", //请求路径包含order的,都需要去登陆 "/login").permitAll().antMatchers("/order/**").hasRole(("USER")).and(). formLogin();//在该处追加.loginPage("/tologin"); http.csrf().disable(); //单点登录。如果已经登录,其它登录会使当前登录session失效。进一步操作则需要再次登录 http.sessionManagement().maximumSessions(1).expiredUrl("/login"); // BCryptPasswordEncoder 加密类 //如果登出,使session无效 http.logout().invalidateHttpSession(true); } @Autowired public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception { auth.inMemoryAuthentication()//全局默认用户 .withUser("admin").password("admin").roles("USER"); }
以上配置,会跳转到springboot的默认登陆页面,这种默认页面,缺少样式,不美观。如果需要自定义登陆,只需要Controller写一个处理方法(例如:“/tologin”),然后在在上述类上追加formLogin().loginPage("/tologin”)即可。用户访问的时候,会跳转到自己定义的处理方法。
4.获取配置文件属性:
springboot 提供一个工具类可以加载application.yml中的配置文件,如果要读取application.yml 以下参数:
spring: username: user password: pass role: - admin - guest
首先要自定义个一个类,做如下设置。
@Component @ConfigurationProperties(prefix = "spring") public class PropertiesConfigurer { private String username; private String password; private List<String> role=new ArrayList<>(); public String getUsername() { return username; } public String getPassword() { return password; } public List<String> getRole() { return role; } }
然后在使用的地方依赖注入:
@Autowired private PropertiesConfigurer propertiesConfigurer; public void () { ....省略 String name= propertiesConfigurer.getUsername(); }
相关文章推荐
- Spring Boot学习笔记----读取配置文件
- Springboot学习笔记之读取全局配置文件参数
- spring-boot读取props和yml配置文件的方法
- SpringBoot学习:获取yml和properties配置文件的内容
- SpringBoot学习笔记(7) SpringBoot整合Dubbo(使用yml配置)
- spring-boot读取props和yml配置文件
- spring-boot读取props和yml配置文件
- spring boot学习2之properties配置文件读取
- SpringBoot学习笔记(5) Spring Boot集成Redis实现自动配置
- SpringBoot读取yml中的配置,并分离配置文件
- Spring-Boot学习笔记(二) 配置文件之初步使用
- springboot如何读取配置文件(application.yml)中的属性值
- spring-boot读取props和yml配置文件
- Spring Boot系列 - 4. 读取配置文件(application.yml)中的属性值
- spring boot 读取配置文件(application.yml)中的属性值
- 02.Spring Cloud学习笔记之Spring Boot配置文件详解
- SpringBoot学习笔记(7) SpringBoot整合Dubbo(使用yml配置)
- SpringBoot学习:获取yml和properties配置文件的内容(转)
- spring boot 读取配置文件(application.yml)中的属性值
- spring boot 读取配置文件(application.yml)中的属性值