Ниже проблема возникла только в среде https.
Веб-сервер Jboss, аутентифицированный с помощью базовой аутентификации.
Теперь при обращении к приложению, развернутому на jboss, все запросы содержат базовые заголовки авторизации. Теперь при использовании правильных учетных данных я не смог войти в систему. Если я использую свое приложение напрямую, не заходя в базовую аутентификацию jboss, я могу войти в приложение и все работает нормально. Проблема в весенней безопасности, если нежелательная базовая аутентификация. Я пытался отключить базовую аутентификацию, но не работает.
Ниже мой код. SecurityContext
package com.adv.admin.context;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.builders.WebSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import com.adv.admin.util.CustomAuthenticationFailureHandler;
import com.adv.admin.util.CustomAuthenticationProvider;
import com.adv.admin.util.CustomLogoutSuccessHandler;
import com.coa.idm.annotation.SSOProvider;
import com.coa.idm.filter.SSOProviderType;
@Configuration
@EnableWebSecurity
@SSOProvider(providerType = SSOProviderType.NONE)
public class LocalSecurityContext extends WebSecurityConfigurerAdapter{
@Autowired
CustomAuthenticationProvider customAuthenticationProvider;
@Autowired
CustomAuthenticationFailureHandler customAuthenticationFailureHandler;
@Autowired
CustomLogoutSuccessHandler customLogoutSuccessHandler;
@Bean
@Override
public AuthenticationManager authenticationManagerBean() throws Exception {
return super.authenticationManagerBean();
}
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
auth.authenticationProvider(customAuthenticationProvider);
}
@Override
protected void configure(final HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/login/**","/logout/**","/views/**").permitAll()
.antMatchers("/technical_setup/**","/preferences_config/**","/admin_management/**")
.access("hasRole('SYSADMIN')")
.antMatchers("/home/**","/custom_help/**","/custom_message/**",
"/custom_help_detail/**","/custom_message_detail/**","/admin_property/**")
.access("hasAnyRole('SYSADMIN','ADMIN')")
.and()
.formLogin()
.loginPage("/login")
.loginProcessingUrl("/perform_login")
.defaultSuccessUrl("/home", true)
.failureUrl("/login?error=3")
.failureHandler(customAuthenticationFailureHandler)
.and()
.logout()
.logoutUrl("/logout")
.deleteCookies("JSESSIONID")
.logoutSuccessHandler(customLogoutSuccessHandler)
.and()
.sessionManagement()
.sessionAuthenticationErrorUrl("/login/invalid-session");
}
@Override
public void configure(WebSecurity web) throws Exception {
web.ignoring().antMatchers("/resources/**").and().ignoring().antMatchers("/WebHelp/**");
}
}
AuthenticationProvider
package com.adv.admin.util;
import java.util.Collection;
import javax.inject.Inject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.authentication.AuthenticationProvider;
import org.springframework.security.authentication.BadCredentialsException;
import org.springframework.security.authentication.DisabledException;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.stereotype.Component;
import com.adv.admin.entity.UserMaster;
import com.adv.admin.model.CustomUser;
import com.adv.admin.repository.AdminRepository;
import com.adv.admin.repository.UserMasterRepository;
import com.adv.admin.services.CustomUserService;
@Component
public class CustomAuthenticationProvider implements AuthenticationProvider {
@Autowired
private CustomUserService userService;
@Autowired
private AdminRepository adminRepository;
@Inject
private UserMasterRepository userMasterRepository;
@Override
public Authentication authenticate(Authentication authentication) {
String username = authentication.getName();
String password = (String) authentication.getCredentials();
UserMaster userMaster;
if (userService.getdataSourceDilact() != null
&& userService.getdataSourceDilact().equals(Constants.POSTGRES_SQL_Dialect)) {
userMaster = userMasterRepository.findByUsr(username);
} else {
userMaster = userMasterRepository.findByUsr(rightPad(username));
}
if (ObjectUtils.isNotEmpty(userMaster)) {
if (userMaster.getDsbld().equals(Constants.FLAG_Y)) {
throw new DisabledException(Constants.DISABLED_MESSAGE);
} else {
String encryptedPassword = (password + " ").substring(0, 8);
encryptedPassword = new String(LogonSecurity.encrypt(encryptedPassword.toCharArray()));
if (!encryptedPassword.equals(userMaster.getPswd())) {
throw new BadCredentialsException(Constants.WRONG_CREDENTIALS_MESSAGE);
} else {
CustomUser user = userService.loadUserByUsername(username);
Collection<? extends GrantedAuthority> authorities = user.getAuthorities();
return new UsernamePasswordAuthenticationToken(user, password, authorities);
}
}
} else {
throw new BadCredentialsException(Constants.WRONG_CREDENTIALS_MESSAGE);
}
}
@Override
public boolean supports(Class<?> arg0) {
return true;
}
private String rightPad(String s) {
return String.format("%-8s", s);
}
}