- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有两种类型的用户:应用程序用户和最终用户,我有单独的表格。现在,我想在这两个表上应用安全性。
我提供了 的自定义实现用户详情服务对于应用程序用户:
@Component("applicationUserDetailsService")
public class ApplicationUserDetailsService implements UserDetailsService {}
@Component("endUserDetailsService")
public class EndUserDetailsService implements UserDetailsService {}
@Overide configure(AuthenticationManagerBuilder auth)
注册分别适用于应用程序和最终用户的方法。
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true)
@Import(SecurityProblemSupport.class)
public class SecurityConfiguration {
// Injected via Constructor Injection
private final EndUserDetailsService endUserDetailsService;
private final ApplicationUserDetailsService applicationUserDetailsService;
@Configuration
@Order(1)
public class ApplicationUserSecurityConfigurationAdapter extends WebSecurityConfigurerAdapter {
@Override
public void configure(WebSecurity web) throws Exception {
web.ignoring()
.antMatchers(HttpMethod.OPTIONS, "/**")
.antMatchers("/swagger-ui/index.html")
.antMatchers("/test/**");
}
@Override
public void configure(HttpSecurity http) throws Exception {
// @formatter:off
http
.csrf()
.disable()
.addFilterBefore(corsFilter, UsernamePasswordAuthenticationFilter.class)
.exceptionHandling()
.authenticationEntryPoint(problemSupport)
.accessDeniedHandler(problemSupport)
.and()
.headers()
.frameOptions()
.disable()
.and()
.sessionManagement()
.sessionCreationPolicy(SessionCreationPolicy.STATELESS)
.and()
.antMatcher("/api/customer/**")
.authorizeRequests()
.antMatchers("/api/customer/authenticate").permitAll()
.antMatchers("/api/customer/**")
.authenticated()
.and()
.apply(securityConfigurerAdapter());
// @formatter:on
}
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(endUserDetailsService);
}
}
//no @Order defaults to last
@Configuration
public class EndUserSecurityConfigurationAdapter extends WebSecurityConfigurerAdapter {
@Override
public void configure(WebSecurity web) throws Exception {
web.ignoring()
.antMatchers(HttpMethod.OPTIONS, "/**")
.antMatchers("/swagger-ui/index.html")
.antMatchers("/test/**");
}
@Override
public void configure(HttpSecurity http) throws Exception {
// @formatter:off
http
.csrf()
.disable()
.addFilterBefore(corsFilter, UsernamePasswordAuthenticationFilter.class)
.exceptionHandling()
.authenticationEntryPoint(problemSupport)
.accessDeniedHandler(problemSupport)
.and()
.headers()
.frameOptions()
.disable()
.and()
.sessionManagement()
.sessionCreationPolicy(SessionCreationPolicy.STATELESS)
.and()
.authorizeRequests()
.antMatchers("/api/authenticate").permitAll()
.antMatchers("/api/**").authenticated()
.and()
.apply(securityConfigurerAdapter());
// @formatter:on
}
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(applicationUserDetailsService);
}
}
private JWTConfigurer securityConfigurerAdapter() {
return new JWTConfigurer(tokenProvider);
}
}
//Injected via Constructor Injection
private final AuthenticationManagerBuilder authenticationManagerBuilder;
UsernamePasswordAuthenticationToken authenticationToken =
new UsernamePasswordAuthenticationToken(loginVM.getUsername(), loginVM.getPassword());
Authentication authentication = authenticationManagerBuilder.getObject().authenticate(authenticationToken);
authenticationManagerBuilder.getObject()
返回 NULL。而当我使用
时执行用户详情服务 与
@Component("userDetailsService")
并且未设置
用户详情服务 在安全配置中,如
auth.userDetailsService("...")
,它工作正常,但这样我无法从多个表中实现身份验证。
最佳答案
requestMatchers()
是您需要的调用,因为它允许您通过 URL 隔离适配器:
@Order(1)
@EnableWebSecurity
class EndUserConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.requestMatchers()
.antMatchers("/api/customer/**")
.and()
.authorizeRequests()
.antMatchers("/**").hasRole("CUSTOMER")
.and()
.apply(yourJointConfigurations());
}
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(endUserDetailsService);
}
}
AuthenticationManager
直接而言,如果您可以依靠现有的过滤器链为您完成工作,那将是理想的选择。例如,由于您是无状态的,HTTP Basic 可能更适合您,您可以将其应用于两种配置,而不是尝试使用专用的
/authenticate
端点。
关于Spring Security 具有不同用户详细信息的多个 HTTPSecurity 服务在 Spring Boot 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57686645/
我正在为 Spring Boot Rest 服务器配置 HttpSecurity,并且我需要使创建用户端点不需要身份验证。 Controller 方法的映射是POST/users/{username}
我有带有 OAuth2 的 Spring Boot 应用程序。我想打开一些端点以进行匿名访问。我可以使用以下方法做到这一点: http .authorizeRequests()
我的Grails 3.0.3应用程序中有一个相当简单的安全配置: @Configuration @EnableWebSecurity class SecurityConfiguration exten
作为一名解决方案架构师,我想为当前应用程序上下文中的所有 Spring Security 过滤器链添加一个过滤器,无论它们是如何或在何处声明的,这样忘记添加它的开发人员就不会错过这个过滤器. 假设不同
您可以通过执行以下操作向响应添加 header @EnableWebSecurity public class CacheControl extends WebSecurityConfigurerAd
我从这里开始关注 Spring Security 指南,http://docs.spring.io/spring-security/site/docs/3.2.0.RELEASE/reference/
我有一个 Spring Boot + Spring Security 应用程序,它有几个antMatchers 路径;一些 fullyAuthenticated(),一些 permitAll()。 如
I am doing Spring Security Oauth2. In client side I override configure(HttpSecurity http) method and
我试图了解 RequestMatcher、AntMatcher 等是如何工作的。我阅读了一些帖子并了解了基础知识。实际上我有这个简单的基本配置: @Override protected void co
我正在尝试向我的应用程序添加一个不安全的 Controller 端点 /foo/bar,但每当我尝试调用它时,我都会收到 401 Unauthorized。 这是我的 WebSecurityConfi
谁能解释一下何时覆盖 configure(HttpSecurity)、configure(WebSecurity) 和 configure(AuthenticationManagerBuilder)?
我收到 POST 端点错误 403 Forbidden,其他端点按预期工作。 我有 4 个端点,我需要重现身份验证行为: GET \users - no authentication GET \det
要在 Spring Boot 中提供自定义身份验证提供程序,我是否需要以下两项?它们有什么区别? AuthenticationManagerBuilder HttpSecurity.authentic
这个问题已经有答案了: Spring Security : Multiple HTTP Config not working (2 个回答) 已关闭 4 年前。 我已按照以下说明为管理员和用户创建两个
我尝试实现spring security,但是我有很多角色和权限,然后我想将角色动态添加到彼此的资源中。喜欢它: @Override protected void configure(HttpSecu
我正在尝试将 Spring Security 实现到我的基于 MVC Maven 的项目,并已包含 Spring Boot。 我有工作前端和后端,但直到现在我都在使用假登录 - 我只是通过 JS 和
在 WebSecurityConfigurerAdapter 类中,我们使用 protected void configure(HttpSecurity http) 方法为请求添加限制。我想要的是:
我听从了 official documentation 的建议关于如何配置两个单独的 HttpSecurity 实例: @Configuration @EnableWebSecurity public
我费尽心思编写了一个 DSL 来为我的自定义身份验证机制配置 HttpSecurity,但是我对其应用的大部分配置在应用程序运行时似乎都没有生效,而当我在 webapp 中手动配置时,一切都完美无缺。
我总是得到 http 状态 403。我有这个安全配置: @Override protected void configure(HttpSecurity httpSecurity) throws Exc
我是一名优秀的程序员,十分优秀!