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

定制Spring Security认证

邓仲卿
2023-03-14

我正在尝试为我的登录表单集成Spring Security,但我很难理解Spring Security如何验证数据库登录:

所以我这样配置了spring-security:

<http auto-config="true"  use-expressions="true">
        <intercept-url pattern="/login" access="permitAll"/>
        <intercept-url pattern="/logout" access="permitAll"/>
        <intercept-url pattern="/denied" access="hasRole('ROLE_USER')"/>
        <intercept-url pattern="/" access="hasRole('ROLE_USER')"/>
        <intercept-url pattern="/user" access="hasRole('ROLE_USER')"/>
        <intercept-url pattern="/admin" access="hasRole('ROLE_ADMIN')"/>

        <form-login login-page="/login" 
            authentication-failure-url="/login/failure" 
            default-target-url="/"/>

        <access-denied-handler error-page="/denied"/>

        <logout invalidate-session="true" 
            logout-success-url="/logout/success" 
            logout-url="/logout"/>
    </http>

    <authentication-manager>
        <authentication-provider user-service-ref="loginManager" >
            <password-encoder hash="bcrypt" />
        </authentication-provider>
    </authentication-manager>

这是我的形式;

<c:url var="loginUrl" value="/login"/>
<form method="post" action="${loginUrl}">
    <input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}" />
    <div class="form_field">
        <label for="login_name">Username / Email</label><br/>
        <input class="field" id="login_name" type="text" name="username" autocomplete="off" />
    </div>
    <div class="form_field">
        <label for="password">Password</label><br/>
        <input class="field" id="password" type="password" name="password" />
    </div>
</form>

这是我的控制器:

    @RequestMapping("/login")
    public String login(Model model, @RequestParam(required=false) String message) {
        model.addAttribute("message", message);
        LOGGER.info("Login");
        return "/login";
    }

    @RequestMapping(value = "/denied")
    public String denied() {
        LOGGER.info("DENIE");
        return "/login";
    }

    @RequestMapping(value = "/login/failure")
    public String loginFailure() {
        String message = "Login Failure!";
        return "redirect:/login?message="+message;
    }

    @RequestMapping(value = "/logout/success")
    public String logoutSuccess() {
        String message = "Logout Success!";
        return "redirect:/login?message="+message;
    }
    < li >我不明白,我们是否需要调用@RequestParam来获取用户名和密码字符串,或者spring会自动获取,因为我已经通知了Spring我的登录页面在配置中的位置?

这是我的服务实现UserDetailsService:

@Override
@Transactional(readOnly=true)
public UserDetails loadUserByUsername(String name)
        throws UsernameNotFoundException {
    LOGGER.info("Verify Customer's Account");
    Login login = loginDao.getLoginByName(name.toLowerCase());

    return new User(login.getName(), login.getPassword(),
            true, true, true, true, 'ROLE_USER')));
}

感谢您的回复。

共有1个答案

高溪叠
2023-03-14

您需要区分登录页面和登录处理 URL。登录页面是您的登录表单。登录处理 URL 接收来自用户的输入并对用户进行身份验证。Spring 安全性将为您执行稍后操作,您应该将表单发布到的默认 URL 是 /j_spring_security_check,您的字段应命名为 j_usernamej_password(使用默认参数名称)。

您的用户详细信息服务不应进行身份验证(即检查密码是否正确),Spring Security将为您执行此操作。

 类似资料:
  • 问题内容: 这是我的情况: 一个Web应用程序对许多应用程序执行某种SSO 登录的用户,而不是单击链接,该应用就会向正确的应用发布包含用户信息(名称,pwd [无用],角色)的帖子 我正在其中一个应用程序上实现SpringSecurity以从其功能中受益(会话中的权限,其类提供的方法等) 因此,我需要开发一个 自定义过滤器 -我猜想-能够从请求中检索用户信息,通过自定义 DetailsUserSe

  • 主要内容:1.入门,2.设置用户名和密码1.入门 1.启动一个SpringBoot项目 2.导入SpringSecurity相关依赖 3.编写Controller TestController.java 用户是user 密码是刚刚的 2.设置用户名和密码 1.在配置文件中设置 2.在配置类中设置 3.自定义实现类 2.1 配置文件中设置 2.2 在配置类中设置 设置用户名为zZZ,密码为root 2.3 自定义实现类 配置类: 业务类:

  • 有问题的电子邮件是这样的:

  • 在MVC Java编程配置方式下,如果你想对默认配置进行定制,你可以自己实现WebMvcConfigurer接口,要么继承WebMvcConfigurerAdapter类并覆写你需要定制的方法: @Configuration @EnableWebMvc public class WebConfig extends WebMvcConfigurerAdapter { // Override

  • 本文向大家介绍Springboot+SpringSecurity+JWT实现用户登录和权限认证示例,包括了Springboot+SpringSecurity+JWT实现用户登录和权限认证示例的使用技巧和注意事项,需要的朋友参考一下 如今,互联网项目对于安全的要求越来越严格,这就是对后端开发提出了更多的要求,目前比较成熟的几种大家比较熟悉的模式,像RBAC 基于角色权限的验证,shiro框架专门用于

  • 本文向大家介绍SpringSecurity 默认表单登录页展示流程源码,包括了SpringSecurity 默认表单登录页展示流程源码的使用技巧和注意事项,需要的朋友参考一下 SpringSecurity 默认表单登录页展示流程源码 本篇主要讲解 SpringSecurity提供的默认表单登录页 它是如何展示的的流程, 涉及 1.FilterSecurityInterceptor, 2.Excep