springboot学习笔记2(拦截器,redis,授权登录,读取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();
     
 }

 

转载于:https://my.oschina.net/u/3511639/blog/911295

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值