自定义登录在 Spring 中不起作用

Posted

技术标签:

【中文标题】自定义登录在 Spring 中不起作用【英文标题】:Custom Login not working in Spring 【发布时间】:2015-02-08 14:08:35 【问题描述】:

我们正在尝试创建自定义登录页面。我们的configure方法写如下

@Override
    protected void configure(HttpSecurity http) throws Exception 
        //http.csrf().disable().formLogin();UserDetailsService

        http.csrf().disable().formLogin().loginPage("/login");
    

我们正在使用 UserDetailsS​​ervice 类来存储用户数据。

@Autowired
    private UserDetailsService userDetailsService;

我们在 Web-Inf/views 文件夹结构下创建了 login.jsp。现在,如果尝试点击登录页面,我们会在控制台中收到如下错误。

“web.servlet.PageNotFound:1120 - 在 DispatcherServlet 中找不到带有 URI [/login] 的 HTTP 请求的映射,名称为“spring””。

我是 Spring 框架的新手,谁能帮我找出哪里出错了。

下面我粘贴了完整的 SecurityConfig 类代码

@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(securedEnabled = true)
public class SecurityConfig extends WebSecurityConfigurerAdapter 

    @Autowired
    private UserDetailsService userDetailsService;

    @Autowired
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception 
        auth.userDetailsService(userDetailsService);
    

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

    @Override
    protected void configure(HttpSecurity http) throws Exception 
        //http.csrf().disable().formLogin();

        http.csrf().disable().formLogin().loginPage("/login");
    


【问题讨论】:

你有控制器吗? 没有用于登录的控制器。我在 WebMvcConfigurerAdapter 扩展类中提供了 jspViewResolver,现在我的自定义登录工作了 【参考方案1】:

可能对某些人有帮助。问题是我不敢说它应该在哪里搜索 jsp 文件。在 WebMvcConfigurerAdapter 类中提供以下方法后,自定义登录工作正常。

@Bean
    public InternalResourceViewResolver jspViewResolver() 
        InternalResourceViewResolver jspViewResolver = new InternalResourceViewResolver();

        jspViewResolver.setViewClass(org.springframework.web.servlet.view.JstlView.class);
        jspViewResolver.setRedirectHttp10Compatible(false);
        jspViewResolver.setPrefix("/WEB-INF/views/");

        jspViewResolver.setSuffix(".jsp");
        jspViewResolver.setOrder(2);

        return jspViewResolver;
    

【讨论】:

以上是关于自定义登录在 Spring 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

自定义登录表单无法使用 Spring Security

Spring Boot Oauth 自定义登录表单

杰克逊自定义反序列化器在 Spring Boot 中不起作用

Django Allauth 自定义登录模板不起作用

Spring Security 自定义登录功能不适用于 Spring Boot 和 REST api

为啥用于 facebook 登录的 redirect_uri 的自定义方案不起作用?