如何禁用spring security默认登录/登录页面?

ki1q1bka  于 2023-04-29  发布在  Spring
关注(0)|答案(2)|浏览(899)

我不能让spring-security显示我自己的登录页面。我已经尝试了几乎所有可用的解决方案。我不知道我的代码出了什么问题。
下面是代码和代码中的注解部分是我已经尝试过的。
Spring启动版本- 2.1.5
SecurityConfig.class

@EnableWebSecurity
@ComponentScan
public class SecurityConfig extends WebSecurityConfigurerAdapter {

@Bean
public UserDetailsService userDetailsService(){
    return super.userDetailsService();
}

@Override
public void configure(HttpSecurity httpSecurity) throws Exception{

    httpSecurity.
            authorizeRequests()
            .antMatchers("/resources/**","/login", "/home").permitAll()
            .antMatchers("/user/**").hasRole("USER")

            .and()
            .formLogin().loginPage("/login").permitAll()
                .defaultSuccessUrl("/user/dashboard")
                .failureUrl("/login-error")

            .and().logout().permitAll();

//////////// Tried this too /////////////////////////////////////
//        httpSecurity.cors().disable()
//                .csrf().disable()
//                .httpBasic().disable()
//                .authorizeRequests().antMatchers("/**").permitAll();

}
@Autowired
public void configureGlobal(AuthenticationManagerBuilder authenticationManagerBuilder) throws Exception{
    authenticationManagerBuilder.userDetailsService(userDetailsService()).passwordEncoder(new BCryptPasswordEncoder());
}

}

视图控制器类:

@Controller
@RequestMapping("/")
public class ViewController {

    @Autowired
    UserRepository userRepository;

    @RequestMapping(value = {"/home"})
    public String showHome(){ return "home.html";}

    @GetMapping(value = "/login")
    public String showLogin(){
    return "login.html";
}

我希望spring-security禁用自己的默认登录页面,并显示我的登录页面。

cedebl8k

cedebl8k1#

您需要配置WebMvcConfigurer
添加以下类作为您的配置,并覆盖addViewControllers方法

@EnableWebMvc
@Configuration
public class WebConfiguration implements WebMvcConfigurer {

        @Override
        public void addResourceHandlers(ResourceHandlerRegistry registry) {

            registry.addResourceHandler("/resources/**").addResourceLocations("/WEB-INF/resources/");
        }

        @Override
        public void addViewControllers(ViewControllerRegistry registry) {
            registry.addViewController("/login").setViewName("login");
        }
    }

之后,允许访问安全配置中的资源

http.authorizeRequests().antMatchers("/resources/**", "/css/**", "/js/**", "/img/**").permitAll()
tct7dpnv

tct7dpnv2#

好吧,这很奇怪,但我刚刚创建了一个新的项目,复制旧的项目文件到新的一个和它的工作预期。

相关问题