- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我创建了一个过滤器,在过滤器 super 构造函数中它需要一个 defaultFilterProcessesUrl
。我通过 url /v1/**
选择了所有请求。
我需要不登录 /v1/users
(POST
方法)和 /v1/users/signin
(POST
方法),但过滤器不允许。如何解决这个问题?
智威汤逊过滤器:
public class JwtAuthenticationTokenFilter extends AbstractAuthenticationProcessingFilter {
public JwtAuthenticationTokenFilter() {
super("/v1/**");
}
@Override
public Authentication attemptAuthentication(HttpServletRequest request, HttpServletResponse response) throws AuthenticationException, IOException, ServletException {
String header = request.getHeader("Authorization");
if(header == null || !header.startsWith("Bearer")){
throw new RuntimeException("JWT token is missing");
}
String authenticationToken = header.substring(7);
JwtAuthenticationToken token = new JwtAuthenticationToken(authenticationToken);
return getAuthenticationManager().authenticate(token);
}
@Override
protected void successfulAuthentication(HttpServletRequest request, HttpServletResponse response, FilterChain chain, Authentication authResult) throws IOException, ServletException {
super.successfulAuthentication(request, response, chain, authResult);
chain.doFilter(request, response);
}
}
Spring 安全配置:
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private JwtAuthenticationProvider authenticationProvider;
@Autowired
private JwtAuthenticationEntryPoint entryPoint;
@Bean
public AuthenticationManager authenticationManager(){
return new ProviderManager(Collections.singletonList(authenticationProvider));
}
@Bean
public JwtAuthenticationTokenFilter authenticationTokenFilter(){
JwtAuthenticationTokenFilter filter = new JwtAuthenticationTokenFilter();
filter.setAuthenticationManager(authenticationManager());
filter.setAuthenticationSuccessHandler(new JwtSuccessHandler());
return filter;
}
@Override
public void configure(WebSecurity web) throws Exception {
web
.ignoring()
.antMatchers(HttpMethod.POST, "/v1/users")
.antMatchers(HttpMethod.POST, "/v1/users/signin")
.antMatchers(HttpMethod.POST, "/token");
}
@Override
protected void configure(HttpSecurity http) throws Exception{
http
.csrf().disable()
.authorizeRequests()
.anyRequest().hasAnyRole("SG_ADMIN", "O_ADMIN", "OS_ADMIN")
.and()
.exceptionHandling().authenticationEntryPoint(entryPoint)
.and()
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);
http.addFilterBefore(authenticationTokenFilter(), UsernamePasswordAuthenticationFilter.class);
http.headers().cacheControl();
}
}
最佳答案
您可以将另一个构造函数与 RequestMatcher
一起使用,参见AbstractAuthenticationProcessingFilter
:
AbstractAuthenticationProcessingFilter
protected AbstractAuthenticationProcessingFilter(RequestMatcher requiresAuthenticationRequestMatcher)
Creates a new instance
Parameters:
requiresAuthenticationRequestMatcher
- theRequestMatcher
used to determine if authentication is required. Cannot be null.
您修改后的代码:
public JwtAuthenticationTokenFilter() {
super(customRequestMatcher);
}
与
RequestMatcher customRequestMatcher = new AndRequestMatcher(
new AntPathRequestMatcher("/v1/**"),
new NegatedRequestMatcher(
new AntPathRequestMatcher("/v1/users", "POST")
),
new NegatedRequestMatcher(
new AntPathRequestMatcher("/v1/users/signin", "POST")
)
);
关于java - WebSecurity 忽略不适用于 AbstractAuthenticationProcessingFilter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55655950/
我为我的 spring boot 应用程序创建了一个登录过滤器: public class JWTLoginFilter extends AbstractAuthenticationProcessin
我想在安全认证过程中向 Authentication 对象添加自定义数据: public class MyAuthFilter extends AbstractAuthenticationProces
我创建了一个过滤器,在过滤器 super 构造函数中它需要一个 defaultFilterProcessesUrl。我通过 url /v1/** 选择了所有请求。 我需要不登录 /v1/users (
我们使用 spring security 根据来自外部应用程序的一些用户详细信息(如 userid )对用户进行身份验证,并使用安全上下文持有者执行授权。我们正在使用 AbstractAuthenti
我的应用程序中有以下端点模式 /token -- 所有人都可以访问 /rest/securedone/** -- 需要身份验证 /rest/securedtwo/** -- 需要身份验证 /rest/
我有一个自定义的 UserDetailsService: public class CustomUserDetailsService implements UserDetailsService {
我正在更新一个旧应用程序以使用 WebFlux,但在使用 Spring Security 处理 JWT 验证时我有点迷失了。 现有代码(适用于标准 Spring Web)如下所示: (验证 Fireb
我有以下 filter 定义: @Component public class JWTAuthenticationFilter extends AbstractAuthenticationProces
我有 2 个过滤器,Filter1 和 Filter2,它们都扩展了 AbstractAuthenticationProcessingFilter。 Filter1 已成功完成其工作并将请求链接到 F
spring org.springframework.web.servlet.HandlerInterceptor 和 org.springframework.security.web.authent
我是一名优秀的程序员,十分优秀!