我正在上一门 Spring 课程,教授用的是一种老式的 Spring Boot 。我尝试使用最新版本,但它在安全部分有一些差异,我遇到了麻烦。
最大的问题是在没有扩展WebConfigurerAdapter的情况下实现SecurityConfig。
这是老师的例子:
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class SecurityConfig extends WebSecurityConfigurerAdapter {
private static final String[] PUBLIC_MATCHERS = { "/h2-console/**" };
@Autowired
private Environment env;
@Override
protected void configure(HttpSecurity http) throws Exception {
if (Arrays.asList(env.getActiveProfiles()).contains("test")) {
http.headers().frameOptions().disable();
}
http.cors().and().csrf().disable();
http.authorizeRequests().antMatchers(PUBLIC_MATCHERS).permitAll().anyRequest().authenticated();
http.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);
}
字符串
这就是我所做的:
@EnableWebSecurity
@Configuration
public class SecurityConfig {
private static final String[] PUBLIC_MATCHERS = {"/h2-console/**"};
@Autowired
private Environment env;
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http.csrf().disable().sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS); //desliga a protecao a csrf, o que permite executar metodos POST,PUT,DELETE sem sessao de usuario
http.authorizeHttpRequests().requestMatchers(PathRequest.toH2Console()).permitAll().and().headers().frameOptions().disable(); //libera acesso ao h2-console
http.cors();
return http.build();
}
型
当我尝试访问“http://localhost:8080/h2-console/”时,它正常工作,但如果我尝试访问其他内容,则返回错误403 Forbidden。
根据课程,如果我尝试访问不同于“h2-console”的内容,它应该重定向到登录页面(浏览器)或返回错误401 Unauthorized(postman),例如:login page
我应该改变什么才能像预期的那样工作?
2条答案
按热度按时间wgeznvg71#
安全配置文件:
字符串
CustomAuthenticationManager
型
7hiiyaii2#
您必须禁用frameOptions并允许h2端点。另外,如果你要使用swagger等,你也必须允许它的端点。下面是工作示例:
字符串