当前位置: 首页 > 知识库问答 >
问题:

Spring Security-无法使用自定义登录页面登录

孟翰海
2023-03-14
@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
    
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        System.out.println("ccc");
        http
        .authorizeRequests()
        .anyRequest().authenticated()
        .and()
        //.formLogin().permitAll()
        .formLogin().loginPage("/login").permitAll()
        .defaultSuccessUrl("/home", true);
    
        System.out.println("ddd");
    
    }
    
    @Bean
    @Override
    protected UserDetailsService userDetailsService() {  
        System.out.println("AAA");
        UserDetails user = User.withDefaultPasswordEncoder()
                .username("root")
                .password("root")
                .roles("ADM")
                .build();
        System.out.println("bbb");
        return new InMemoryUserDetailsManager(user);
    }
}
@Controller
public class LoginController {
    
    @GetMapping
    @RequestMapping("/login")
    public String login() {
        return "login";
    }
    
}
<!DOCTYPE html>
<html>
    <head th:replace="~{base :: head}"></head>
    <body>
        <div th:replace="~{base :: logo}"></div>
        <div class="container">
            <div th:replace="~{base :: titulo('Login')}"></div>
            <div class="card mb-3">
                <form th:action="@{/login}" method="POST" class="card-body">
                    <div class="form-group mb-3">
                        <div class="mb-2">
                            <label for="username" class="sr-only">Usuário</label>
                            <input type="text" name="username" class="form-control" placeholder="usuário"/>
                        </div>
                        <div class="mb-2">
                            <label for="password" class="sr-only">Senha</label>
                            <input type="password" name="username" class="form-control" placeholder="senha"/>
                        </div>
                        <button class="btn btn-primary" type="submit">Login</button>
                    </div>                  
                </form>
            </div>
        </div>
    </body>
</html>
protected void configure(HttpSecurity http) throws Exception {
        
        http
        .antMatcher("/**")
        .authorizeRequests()
          .antMatchers("/", "/login**","/callback/", "/webjars/**", "/css**", "/error**")
          .permitAll()
        .anyRequest()
          .authenticated()
         .and()
         .formLogin().loginPage("/login").loginProcessingUrl("/login")
         .defaultSuccessUrl("/home").failureUrl("/login?message=error").usernameParameter("username")
         .passwordParameter("password").and().logout().logoutUrl("/perform_logout")
         .logoutSuccessUrl("/login?message=logout");

}
@GetMapping("/login-error")
    @RequestMapping("/login")
    public String login(HttpServletRequest request, Model model) {
        HttpSession session = request.getSession(false);
        String errorMessage = null;
        if (session != null) {
            AuthenticationException ex = (AuthenticationException) session
                    .getAttribute(WebAttributes.AUTHENTICATION_EXCEPTION);
            if (ex != null) {
                errorMessage = ex.getMessage();
            }
        }
        System.out.println("--->" + errorMessage);
        model.addAttribute("errorMessage", errorMessage);
        return "login";
    }

而且,再一次,即使键入正确的凭据,正如我在“userDetailsService”方法中指定的那样,我也无法登录,但这次我终于可以在控制台上看到错误消息:

--->User not found or invalid password

显然我走了,但没有离开这个地方,因为现在我不知道我的代码有什么问题...

共有1个答案

谈旺
2023-03-14

看来这可能只是个错别字。密码字段称为用户名:

<input type="password" name="username" class="form-control" placeholder="senha"/>

将其更改为:

<input type="password" name="password" class="form-control" placeholder="senha"/>

一切都很好。

 类似资料:
  • 请参考一些wordpress post登录插件。我有3页的网站主页,关于正常工作和工作安全,我想显示工作安全页面,如果用户登录有电子邮件/只是虚拟id,我可以生成。找不到此登录模块的插件。带有自定义页面的自定义菜单 使用这个脚本,我可以创建菜单,但不能重定向单独的页面 函数my_wp_nav_menu_args($args=''){ 如果(用户是否已登录){ }否则{ } } 添加过滤器(“wp\

  • 我在我的JSF应用程序中使用容器管理的安全性,因此我有一个低于默认设置的登录页面。 现在在登录页面中,我想在登录按钮旁边添加一个按钮,以允许用户注册。 但我该如何将其转发到我的登记簿。我的注册按钮的xhtml页面?我用以下代码进行了尝试: 我也尝试将表单更改为h: form,以便我可以使用p:命令按钮,但正如我注意到的,我的登录页面不工作,当我单击提交按钮时什么也没有发生。 如何实现我想做的事?

  • 我试图在我的Spring项目上实现一个自定义登录页面,但是当我运行该项目时,我得到以下错误: 有人知道是什么导致了这个错误吗??

  • 我想知道我应该如何创建我自己的自定义登录页面?我尝试了https://docs.spring.io/spring-security/site/docs/current/guides/html5/form-javaconfig.html和http://www.baeldung.com/spring-mvc-tutorial#configviews等指南,但没有任何效果,因为我似乎无法使类工作。我一直

  • 我想用selenium登录这个网页。我尝试了selenium的find_element_by_,并使用浏览器中的检查元素。但是我无法登录。我在搜索id、名称、类名,这样我就可以用send_keys传递数据,但是没有做到这些。有人能帮助我提供一些代码来将数据推送到所需的字段吗?谢谢。这就是我到目前为止所做的。 在此之后,我试图点击按钮登录使用 但它失败了。它给出了无法找到“登录”的错误。由于默认情况

  • 所以我正在尝试在 Spring 启动和安全的帮助下创建简单的登录页面。所以我目前拥有的是自定义登录页面和一个用户和角色的内存身份验证。问题是,当我输入正确的用户/密码时,spirng没有将其认证为有效数据,并再次将我重定向到登录页面,但这次是: 在客户端,我使用胸腔叶。 表单片段: 配置类: 控制器简单 知道我做错了什么吗?