gpt4 book ai didi

java - 如何将 "include"Spring Security配置到应用程序中

转载 作者:行者123 更新时间:2023-12-02 12:34:27 25 4
gpt4 key购买 nike

我是 Spring Security 的新手,我正在按照以下示例配置 Spring Security:https://spring.io/blog/2013/07/03/spring-security-java-config-preview-web-security/ 。所以我看到他们用这个方法让spring知道配置。

public class SpringWebMvcInitializer extends
AbstractAnnotationConfigDispatcherServletInitializer {

@Override
protected Class<?>[] getRootConfigClasses() {
return new Class[] { HelloWebSecurityConfiguration.class };
}
...
}

但是我有这样的应用程序初始化:

public class AppInit implements WebApplicationInitializer{

public void onStartup(ServletContext servletContext) throws ServletException {
// TODO Auto-generated method stub

AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext();
context.register(AppConfiguration.class);

ServletRegistration.Dynamic registration =
servletContext.addServlet("dispatcher", new DispatcherServlet(context));
registration.setLoadOnStartup(1);
registration.addMapping("/services/rest/*");

}

}

我想在那里包含我的 spring 安全配置,因为没有它,我会在浏览器中收到消息:您的登录尝试未成功,请重试。

原因:找不到 org.springframework.security.authentication.UsernamePasswordAuthenticationToken 的 AuthenticationProvider

最佳答案

AbstractAnnotationConfigDispatcherServletInitializer扩展是一种让spring加载安全配置的方法,但我不使用它。一种更方便的方法可以像这样(首先在 pom.xml 中声明 spring security 的依赖):

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception{
auth.inMemoryAuthentication().withUser("user").password("user").roles("USER")
.and().withUser("admin").password("admin").roles("USER","ADMIN");
}


@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable();
http.authorizeRequests()
.antMatchers("/").hasRole("USER")
.antMatchers("/index").hasRole("USER")
.antMatchers("/message/*").hasRole("USER")
.anyRequest().permitAll()
.and().formLogin().loginPage("/login").defaultSuccessUrl("/index").failureUrl("/login?error").permitAll()
.and().rememberMe().tokenValiditySeconds(60*60*7).key("message")
.and().logout().logoutUrl("/logout").logoutSuccessUrl("/login").permitAll();
// define your action here.
}

}

Spring 将在启动时自动加载此配置,这足以让 spring security 工作。正如你所看到的,你应该在 configure(HttpSecurity http) 中定义规则来告诉 spring security 当请求到来时要做什么。

关于java - 如何将 "include"Spring Security配置到应用程序中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45185398/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com