我正在使用Spring引导安全层来验证和授权user.Now,我想使用多超文本传输协议安全配置做一些示例应用程序。我有这样的场景,比如将有两个具有不同URL映射的登录页面(“/Management ementLogin”、“/thersLogin”)。
我可以理解如何配置多httpSecurity配置,但我需要验证用户从两个tables.If管理用户登录我需要验证用户从管理表通过DAO层使用UserDetailsService
否则,如果任何其他用户登录我需要从other_users表验证。
有人能帮我知道如何使用UserDetailsService
配置带有Spring启动安全性的超文本传输协议配置和道层吗?
这是我的基本代码片段,
@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER)
public class ApplicationSecurity extends WebSecurityConfigurerAdapter {
@Autowired
@Qualifier("userDetailsService")
UserDetailsService userDetailsService;
@Autowired
private RESTAuthenticationEntryPoint authenticationEntryPoint;
@Autowired
private RESTAuthenticationFailureHandler authenticationFailureHandler;
@Autowired
private RESTAuthenticationSuccessHandler authenticationSuccessHandler;
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
// for testing authentication purpose using inMemory db
/*
* auth.inMemoryAuthentication().withUser("user").password("user").roles
* ("USER").and().withUser("admin") .password("admin").roles("ADMIN");
*/
// Dao based authentication
auth.userDetailsService(userDetailsService).passwordEncoder(passwordEncoder());
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests().antMatchers("/", "/home").permitAll();
http.authorizeRequests().antMatchers("/rest/**").authenticated();
http.exceptionHandling().authenticationEntryPoint(authenticationEntryPoint);
http.formLogin().successHandler(authenticationSuccessHandler);
http.formLogin().failureHandler(authenticationFailureHandler);
http.logout().logoutSuccessUrl("/");
// CSRF tokens handling
http.addFilterAfter(new CsrfTokenResponseHeaderBindingFilter(), CsrfFilter.class);
}
@Override
public void configure(WebSecurity web) throws Exception {
web
.ignoring()
.antMatchers("/registerUser","/register.html");
}
@Bean
public PasswordEncoder passwordEncoder() {
PasswordEncoder encoder = new BCryptPasswordEncoder();
return encoder;
}
}
TIA。。,
实际上,您将需要使用两个用户详细信息服务。但是,这还不够。我建议您创建另一个具有不同顺序的 ApplicationSecurity2
类。
Spring Security性建立在过滤器链的有序列表上。
看看Dave Sayer在这里给出的答案。然后,您可以根据需要处理不同的URL。
用他自己的UserDetailsService实现两个DaoAuthenticationProvider,并将这两个提供者注入authenticationManager。
我不知道两个不同的登录endpoint需要什么,但一开始我认为这是个坏主意。您可以创建不同的身份验证对象,并让AuthenticationManager根据supports方法选择正确的身份验证提供程序。
实现自定义UserDetailsService,如下所示:
@Service
public class CustomUserDetailsService implements UserDetailsService {
@Autowired
private UserDaoTableOne userDaoTableOne;
@Autowired
private UserDaoTableTwo userDaoTableTwo;
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
UserDetails user = userDaoTableOne.find(username);
if(user == null){
user = userDaoTableTwo.find(username);
}
if (user == null) {
throw new UsernameNotFoundException(String.format("Username '%s' not found", username));
}
return user;
}
}
我为spring-boot创建了一个spring安全配置类。我的登录页面有资源css、js和ico文件。这些资源由于安全原因而被拒绝,并且每次都被重定向到登录页面。为什么EnableWebMVCSecurity不添加类路径资源位置。在更改代码后,如第二个代码片段所示,将添加I Classpath资源位置。不明白第一段代码中的资源缺少什么。 我通过将代码更改为 在更改代码之后,我注意到忽略路径被添加
我的spring boot应用程序有一个application类。当我(作为应用程序)运行它时,它会在嵌入式servlet容器(在我的例子中是Tomcat)中启动自己。以某种方式(我想是通过应用程序的@Annotations),加载了同一包中的WebSecurityConfig(扩展WebSecurityConfigurerAdapter)。 WebSecurityConfig包含两个重要的配置信
然后我添加了一个SecurityConfig。从那时起,CorsFilter停止工作,我在angular应用程序中得到了一个异常: CORS策略阻止了从origin“http://localhost:8080/users/999/folders/%2f/media/”从“http://localhost:4200”访问“http://localhost:8080/users/999/folders
我正在做一个测试项目,为我们未来的项目尝试SpringBoot。 我们正在使用jasig CAS,我正在尝试配置Spring Boot和嵌入式tomcat服务器。 所以我加入了pom。xml spring启动程序安全性 之后,我尝试配置WebSecurityConfig- 这里是第一个问题:类组织。springframework。安全中科院。网状物应用程序未重新确认CasAuthenticatio
我正在使用Spring Security性,它工作正常,但现在我想手动启动安全过程,对客户端进行更改,我需要在我的控制器中获取用户名和密码(表单不会直接调用“j_spring_security_check”) 我想到了两个选项,我有一些问题: > 在我得到参数并做了一些事情之后,我将向j_spring_security_checkurl发送一个post请求。我的代码: 公共无效测试(loginDT
我有一个使用Spring MVC编写的REST服务。该服务器是一个OAuth2资源服务器,我正在使用Jwt验证提供程序来解析JWT并将其转换为主体。这一切都很好。 然而,我真正想做的是使用JWT中声明提供的用户名从数据库加载用户详细信息。然后,新主体应该替换或(理想情况下)包装Jwt,以便它可以直接从SecurityContext获得。 我真的很难看到如何做到这一点。JwtAuthenticati