添加弹簧安全过滤器后的404
Posted
技术标签:
【中文标题】添加弹簧安全过滤器后的404【英文标题】:404 after adding spring security filters 【发布时间】:2021-12-31 23:29:03 【问题描述】:向我的微服务添加安全配置后,我收到所有请求的 404 错误。请求本身与之前的安全配置相同。在输入控制器方法之前,我正在输入 AuthenticationFilter 并获得 404。控制器带有 @RestController 注释。
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(
prePostEnabled = true,
securedEnabled = true,
jsr250Enabled = true)
public class HttpSecurityConfig extends WebSecurityConfigurerAdapter implements WebMvcConfigurer
@Autowired
private AdminAuthClient adminAuthClient;
@Autowired
private MyUserDetailsService myUserDetailsService;
@Override
protected void configure(final HttpSecurity http) throws Exception
http.cors()
.and()
.httpBasic().disable()
.csrf().disable()
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
.and()
.authorizeRequests()
.anyRequest()
.authenticated()
.and()
.antMatcher("/admin/**")
.addFilterBefore(new AuthenticationFilter(adminAuthClient, myUserDetailsService),
UsernamePasswordAuthenticationFilter.class);
【问题讨论】:
URL
你得到 404 not found
GET localhost:8080/v1/admin/items
v1
是上下文路径吗?
是的。即使我从上下文路径中删除它并从请求中删除 - 同样的 404 错误
您的自定义过滤器有什么作用?
【参考方案1】:
您必须授予在Spring Security
中加载Url
的权限。 Spring Security 有方法 permitAll()
用于授予 url 的权限。
下面是例子:
@Override
protected void configure(final HttpSecurity http) throws Exception
http.cors()
.and()
.httpBasic().disable()
.csrf().disable()
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
.and()
.authorizeRequests()
.antMatcher("/admin/**", "/v1/admin/items").permitAll() // for give permission
.anyRequest()
.authenticated()
.and()
.addFilterBefore(new AuthenticationFilter(adminAuthClient, myUserDetailsService),
UsernamePasswordAuthenticationFilter.class);
【讨论】:
以上是关于添加弹簧安全过滤器后的404的主要内容,如果未能解决你的问题,请参考以下文章