java - 如何在 SecurityConfig.java 中使用 setter 而不是 New JWTAuthenticationFilter
问题描述
我正在使用 spring-boot (使用 JWT 和 spring security ),并且我在 spring-boot 中有一个类 configSecurity ,代码如下:
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class SecurityConfig extends WebSecurityConfigurerAdapter {
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable();
http.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);
http.authorizeRequests().antMatchers("/login/**").permitAll();
http.authorizeRequests().antMatchers(HttpMethod.GET,"/ListProjects/**").hasAuthority("ADMIN");
http.authorizeRequests().anyRequest().authenticated()
.and()
.exceptionHandling().authenticationEntryPoint(authenticationEntryPoint());
http.authorizeRequests().antMatchers(HttpMethod.OPTIONS, "/**").permitAll(); //allow CORS option calls
http.addFilter(new JWTAuthenticationFilter(authenticationManager()));
http.addFilterBefore(new JWTAutorizationFilter(), UsernamePasswordAuthenticationFilter.class);
}
还有一个类:JWTAuthenticationFilter.java,它包含了contsructor:
@Autowired
public JWTAuthenticationFilter(AuthenticationManager authenticationManager)
{
this.authenticationManager = authenticationManager;
}
我的目标是更改 securityConfig 中的行:
http.addFilter(new JWTAuthenticationFilter(authenticationManager()));
变成这样的东西:
http.addFilter(jwtAuthenticationFilter.SetJWTAuthenticationFilter(authenticationManager());
所以我在 SecurityConfig 类中添加了 Annocation @Autoweird 如下:
@Autowired
private JWTAuthenticationFilter jwtAuthenticationFilter;
所以我不知道如何在 JWTAuthenticationFilter.java 中制作这个方法,我做了这样的事情:
@Autowired
public JWTAuthenticationFilter SetJWTAuthenticationFilter(AuthenticationManager authenticationManager) {
this.authenticationManager = authenticationManager;
return // (1)
}
(1) :那么在这种情况下我应该返回什么?我不想使用类似 new JWTAuthenticationFilter () .. 的东西,知道吗?或者我没有以正确的方式这样做..?
编辑
添加这些更改后,我无法对用户进行身份验证,因此无法获取每个用户的令牌,我认为问题出在我添加的新类上,它实现了一个返回 null 的方法
import org.springframework.context.annotation.Configuration;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.AuthenticationException;
@Configuration
public class CustomAuthManager implements AuthenticationManager {
@Override
public Authentication authenticate(Authentication authentication) throws AuthenticationException {
return null;
}
}
任何的想法 ??
解决方案
那部分代码
@Autowired
public JWTAuthenticationFilter(AuthenticationManager authenticationManager) {
this.authenticationManager = authenticationManager;
}
意味着如果您创建JWTAuthenticationFilter
为 Spring 组件(不是通过调用new
)AuthenticationManager
将自动自动装配到该类中,并且您不需要运行任何类型的设置器。
你的authenticationManager()
方法是做什么的?如果你只是创建一个新@Bean
的,AuthenticationManager
你可能只是在一个单独的类中做它,它会自动自动连接到 JWTAuthenticationFilter
.
可能的解决方案:
1.创建类:
@Configuration
public class CustomAuthManager implements AuthenticationManager {
...
}
2. 添加到SecurityConfig
:
@Autowired
private JWTAuthenticationFilter jwtAuthenticationFilter;
并使用http.addFilter(jwtAuthenticationFilter);
3。保持JWTAuthenticationFilter
原样。
推荐阅读
- javascript - 如何检查 React 构建文件夹
- android - Android Scoped Stoage - 在 onActivityResult 中获取视频详细信息
- snmp - 如何在 SNMP MIB 中创建表
- c - 如何将指针数组初始化为NULL?
- hpc - 有没有办法在完成后制作 slurm 打印作业摘要?
- java - 如果选中前一个复选框(首先禁用其他复选框),如何在回收站视图中启用其他复选框?
- python - 如何获取最后一个括号中的字符串?
- facebook - 如何在按钮单击时更改 facebook 嵌入帖子 data-href 值
- docker - 在 BitBucket 管道中查找 Docker 映像的确切版本
- html - ul 在 div 中没有正确对齐