我正在遵循这个auth0的教程来使用JWT来保护我的应用程序.
我最终得到了以下WebSecurity配置:
@EnableWebSecurity
@AllArgsConstructor(onConstructor = @__(@Autowired))
public class WebSecurity extends WebSecurityConfigurerAdapter {
private final UserDetailsService userDetailsService;
private final BCryptPasswordEncoder passwordEncoder;
@Override
protected void configure(HttpSecurity http) throws Exception {
http.formLogin()
.and().cors()
.and().csrf()
.disable()
.authorizeRequests()
.antMatchers(HttpMethod.POST, REGISTER_URL).permitAll()
.antMatchers(HttpMethod.POST, LOGIN_URL).permitAll()
.anyRequest().authenticated()
.and()
.addFilter(new JWTAuthorizationFilter(authenticationManager()))
.addFilter(new JWTAuthenticationFilter(authenticationManager()))
// This disables session creation on Spring Security
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);
}
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(userDetailsService).passwordEncoder(passwordEncoder);
}
@Bean
public CorsConfigurationSource corsConfigurationSource() {
final UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
source.registerCorsConfiguration("/**", new CorsConfiguration().applyPermitDefaultValues());
return …Run Code Online (Sandbox Code Playgroud) 我有如下数据类:
@Entity
@Table(name = "SECTIONS")
data class Section(
@Id @GeneratedValue
@Column(name = "ID")
var id: Long = 0,
@Column(name = "NAME")
var name: String = "",
@OneToMany(
mappedBy = "section",
fetch = FetchType.EAGER,
cascade = arrayOf(CascadeType.ALL),
orphanRemoval = true
)
var fields: MutableList<Field> = mutableListOf()
)
@Entity
@Table(name = "FIELDS")
data class Field(
@Id @GeneratedValue
@Column(name = "ID")
var id: Long = 0,
@Column(name = "NAME")
var name: String = "",
@ManyToOne
@JoinColumn(name = "SECTION_ID")
var section: Section? = null …Run Code Online (Sandbox Code Playgroud) 我有一个 Spring @Configuration 类,如下所示:
@Configuration
public class ExecutorServiceConfiguration {
@Bean
public BlockingQueue<Runnable> queue() {
return ArrayBlockingQueue<>(1000);
}
@Bean
public ExecutorService executor(BlockingQueue<Runnable> queue) {
return ThreadPoolExecutor(1, 1, 0L, TimeUnit.MILLISECONDS, queue);
}
@PreDestroy
public void shutdownExecutor() {
// no executor instance
}
}
Run Code Online (Sandbox Code Playgroud)
我还想指定一种@PreDestroy关闭 ExecutorService 的方法。但是,该@PreDestroy方法不能有任何参数,这就是为什么我无法将executorbean 传递给该方法以关闭它的原因。指定 destroy 方法也@Bean(destroyMethod = "...")不起作用。它允许我指定现有的shutdownor shutdownNow,但不能指定我打算使用的自定义方法。
我知道我可以直接实例化队列和执行器,而不是作为 Spring bean,但我宁愿这样做。