问题如下,一直被拦截到此界面。
造成这样的原因是security框架造成的
<!--引入spring安全框架-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
解决方法
如果你不需要这个依赖可以直接删除它,就可以暴力解决一直被重定向login页面的问题。
当然也可以定一个配置类如下:
设置admin角色请求就不会被过滤拦截到login。
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable();
//首页所有人都可以访问
http.authorizeRequests().antMatchers("/").permitAll()
.antMatchers("/admin/**").hasRole("admin");
http.formLogin().loginPage("/login").loginProcessingUrl("/login");
}
}
以下继续测试拦截器
定义一个拦截类
public class UserTokenInterceptor implements HandlerInterceptor{
/**
* 拦截请求,在controller调用之前
*/
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("进入到拦截器,被拦截...");
/**
* false:请求被拦截,被驳回,验证出现问题
* true:请求在经过验证校验之后是ok的,可以放行的
*/
return false;
}
/**
* 请求访问controller之后,渲染视图之前
*/
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("请求接口后,渲染视图之前");
}
/**
* 请求访问controller之后,渲染视图之后
*/
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("请求接口后,渲染视图之后");
}
}
在WebMvcConfigurer 实现中注册拦截器
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
/**
* 实现静态资源的映射
*/
// @Override
// public void addResourceHandlers(ResourceHandlerRegistry registry) {
// registry.addResourceHandler("/**")
// // 映射swagger2
// .addResourceLocations("classpath:/META-INF/resources/")
// // 映射本地静态资
// .addResourceLocations("file:/workspaces/images/");
// }
//
// @Bean
// public RestTemplate restTemplate(RestTemplateBuilder builder) {
// return builder.build();
// }
@Bean
public UserTokenInterceptor userTokenInterceptor() {
return new UserTokenInterceptor();
}
/**
* 注册拦截器
* @param registry
*/
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(userTokenInterceptor())
//这是拦截hello接口,也可以设置成“/**”全部拦截
.addPathPatterns("/hello");
WebMvcConfigurer.super.addInterceptors(registry);
}
}
controller层中测试接口
@GetMapping("/hello")
public Object hello() {
logger.debug("debug: hello~");
logger.info("info: hello~");
logger.warn("warn: hello~");
logger.error("error: hello~");
return "Hello World~";
}
测试
修改下注册配置
修改成不拦截hello接口
/**
* 注册拦截器
* @param registry
*/
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(userTokenInterceptor())
.addPathPatterns("/**")
.excludePathPatterns("/hello");
WebMvcConfigurer.super.addInterceptors(registry);
}
测试不拦截