gpt4 book ai didi

spring - 如何使用 spring boot 和 spring security openId 配置 Spring 4.0

转载 作者:行者123 更新时间:2023-12-04 18:42:53 25 4
gpt4 key购买 nike

我正在尝试使用 Spring Security OpenId 启动并运行 Spring 4.0 启动应用程序。我正在使用标准方法来引导 Spring 启动应用程序:

@Configuration
@ComponentScan("x.y.z")
@EnableAutoConfiguration
@Import({SecurityConfig.class})
public class ServiceRegistryStart extends SpringBootServletInitializer {

public static void main(String[] args) {
SpringApplication.run(ServiceRegistryStart.class, args);
}

@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
application.sources(getClass());
return application;
}
}

SecurityConfig.class 如下所示(受 Spring security 中的“openid-jc 示例项目影响”):
@Configuration
@EnableWebMvcSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/resources/**").permitAll()
.anyRequest().authenticated()
.and()
.openidLogin()
.loginPage("/login.html")
.permitAll()
.authenticationUserDetailsService(new CustomUserDetailsService())
.attributeExchange("https://www.google.com/.*")
.attribute("email")
.type("http://axschema.org/contact/email")
.required(true)
.and()
.attribute("firstname")
.type("http://axschema.org/namePerson/first")
.required(true)
.and()
.attribute("lastname")
.type("http://axschema.org/namePerson/last")
.required(true)
.and()
.and()
.attributeExchange(".*yahoo.com.*")
.attribute("email")
.type("http://axschema.org/contact/email")
.required(true)
.and()
.attribute("fullname")
.type("http://axschema.org/namePerson")
.required(true)
.and()
.and()
.attributeExchange(".*myopenid.com.*")
.attribute("email")
.type("http://schema.openid.net/contact/email")
.required(true)
.and()
.attribute("fullname")
.type("http://schema.openid.net/namePerson")
.required(true);
}

@Bean(name = "myAuthenticationManager")
@Override
public AuthenticationManager authenticationManagerBean() throws Exception {
return super.authenticationManagerBean();
}

class CustomUserDetailsService implements AuthenticationUserDetailsService<OpenIDAuthenticationToken> {

@Override
public UserDetails loadUserDetails(OpenIDAuthenticationToken token) throws UsernameNotFoundException {
return new User(token.getName(), "", AuthorityUtils.createAuthorityList("ROLE_USER"));
}
}
}

登录页面如下所示:
<form id="googleLoginForm" action="/j_spring_openid_security_check" method="post">
<h1>Login</h1>

<input name="openid_identifier" type="hidden" value="https://www.google.com/accounts/o8/id"/>
<input name="openid.ns.pape" type="hidden" value="http://specs.openid.net/extensions/pape/1.0"/>
<input name="openid.pape.max_auth_age" type="hidden" value="0"/>

<p>
<input name="submit" value="Login using Google" type="submit"/>
</p>
</form>

问题是“/j_spring_openid_security_check”似乎不存在。我认为问题是我应该在使用 Spring Security 时从 AbstractSecurityWebApplicationInitializer 扩展,但是对于启动我应该使用 SpringBootServletInitializer。将两者结合起来的最佳方式是什么? SpringBootServletInitializer 的 javadoc 说它在检测到 Spring Security 时会自动注册一个过滤器,但在这种情况下它似乎不起作用。

最佳答案

我实际上设法解决了这个问题。首先,我使用 Spring Boot 来启动一个嵌入式容器,所以我不需要任何 WebApplicationInitializers。其次,登录页面中的帖子 URL 应指向“/login/openid”,第三,我必须使用以下方法在安全配置中禁用跨站点请求伪造预防:

http.csrf().disable(). ..

在 SecurityConfig 类的配置方法中。

关于spring - 如何使用 spring boot 和 spring security openId 配置 Spring 4.0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21231057/

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