我试图配置我的应用程序的安全性,但我得到了“意外错误(类型=禁止,状态=403)”,我不知道是什么问题。我注册了一个用户,然后登录,做了一些事情,在“/设计”页,按提交,并得到错误。正如我所知(从Spring的行动书)Thymeleaf自动包括隐藏字段与CSRF令牌的每一个html页面。
当我在SecurityFilterChain中禁用csrf时,我的Web应用程序工作正常。我的SecurityConfig类如下所示:我只排除H2 Console路径。
@Configuration
@EnableWebSecurity
public class SecurityConfig {
private UserRepository userRepository;
@Bean
public UserDetailsService userDetailsService(UserRepository userRepo) {
return username -> {
User user = userRepo.findByUsername(username);
if(user != null) {
return user;
}
throw new UsernameNotFoundException("User \"" + username + "\" not found");
};
}
@Bean
public PasswordEncoder encoder() {
return new BCryptPasswordEncoder();
}
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http
.csrf().ignoringRequestMatchers(PathRequest.toH2Console())
.and()
.headers((headers) -> headers.frameOptions().sameOrigin())
.authorizeHttpRequests()
.requestMatchers("/design","/orders").hasRole("USER")
.requestMatchers("/", "/**").permitAll()
.and()
.formLogin(
form -> form
.loginPage("/login")
.loginProcessingUrl("/login")
.defaultSuccessUrl("/design")
.permitAll()
).logout(
logout -> logout
.logoutRequestMatcher(new AntPathRequestMatcher("/logout"))
.permitAll()
);
return http.build();
}
}
1条答案
按热度按时间s8vozzvw1#
感谢@dsp_user。通过添加
thymeleaf-extras-springsecurity5
依赖项解决了问题