spring security 表单登录loginPage和loginProcessingUrl

发布于 2022-09-11 19:23:37 字数 1347 浏览 12 评论 0

配置

.authorizeRequests()
.antMatchers("/", "/index").permitAll()
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/testpage.html")
.defaultSuccessUrl("/testS")
.permitAll()
.and()
.logout()
.permitAll()

testpage.html

<form class="form-signin" method="post" action="/login">
    <h2 class="form-signin-heading">Please sign in</h2>
    <p>
        <label for="username" class="sr-only">Username</label>
        <input type="text" id="username" name="username" class="form-control" placeholder="Username" required="" autofocus="">
    </p>
    <p>
        <label for="password" class="sr-only">Password</label>
        <input type="password" id="password" name="password" class="form-control" placeholder="Password" required="">
    </p>
    <button class="btn btn-lg btn-primary btn-block" type="submit">Sign in</button>
</form>

自己对loginPage和loginProcessingUrl做了下测试:
两者都不配置:默认都是/login
两者都配置:按自己的来
只配置loginProcessingUrl:loginPage默认提供的页面

这样想着,觉得loginProcessingUrl默认应该是/login,所以
只配置loginPage,action为/login
(代码上面)
结果发现就不行了

我想问一下,loginProcessingUrl默认值是什么?自定义配置了loginPage就必须同时配置上loginProcessingUrl吗?

初涉Spring Security,希望熟知的可以解下我的疑惑,thx

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

苏佲洛 2022-09-18 19:23:37
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.formLogin() // 表单登陆
                .loginPage("/login.html") // 登陆页面
                .loginProcessingUrl("/login/oneself") // 登陆表单提交请求
                .and()
                .authorizeRequests() // 对请求进行授权
                .antMatchers("/login.html") // 指定相应的请求
                .permitAll() // 不需要验证
                .anyRequest() // 任何请求
                .authenticated(); // 都需要身份认证
    }

为啥我这么配置,点击自己的登陆页面提交时,提示/login/oneself这个404

旧城烟雨 2022-09-18 19:23:37

loginProcessingUrl默认好像是j_spring_secutity_check
跟loginPage的区别在这里
https://stackoverflow.com/que...

好像只要保持action和HttpSecurity里配置的loginProcessingUrl一致就可以了,也不用自己去处理

酒绊 2022-09-18 19:23:37

先说看了Spring security源码后的结论吧~(没看文档,只是出于个人对代码和代码注释的理解得出的结论,可以自己再看看是不是这样):
如果你在重写WebSecurityConfigurerAdapter的configure方法时没有设置loginPage(),那么默认的访问页面就是"/login",如果你没有设置loginProcessingUrl(),那么默认的用户名密码后端校验逻辑的URL跟loginPage对应的地址一致。

首先可以根据代码注释解释下两个属性分别是干嘛用的:

loginPage the login page to redirect to if authentication is required (也就是说这个是定义校验页面路径的)
loginProcessingUrl the URL to validate username and password(这个是定义校验逻辑处理的后端URL的)

其次可以看看默认值:

 DEFAULT_LOGIN_PAGE_URL = "/login"(默认设置的页面路径为/login)
/**
     * Updates the default values for authentication.
     *
     * @throws Exception
     */
    protected final void updateAuthenticationDefaults() {
        if (loginProcessingUrl == null) {
            loginProcessingUrl(loginPage); //(默认设置与成loginPage路径相同的URL)
        }
        if (failureHandler == null) {
            failureUrl(loginPage + "?error");
        }

        final LogoutConfigurer<B> logoutConfigurer = getBuilder().getConfigurer(
                LogoutConfigurer.class);
        if (logoutConfigurer != null && !logoutConfigurer.isCustomLogoutSuccess()) {
            logoutConfigurer.logoutSuccessUrl(loginPage + "?logout");
        }
    }
撞了怀 2022-09-18 19:23:37

我断点看了一下

class AbstractAuthenticationFilterConfigurer { 
........
protected final void updateAuthenticationDefaults() {
        if (loginProcessingUrl == null) {
            loginProcessingUrl(loginPage);//如果loginProcessingUrl为null,则设置loginPage默认值
        }
        if (failureHandler == null) {
            failureUrl(loginPage + "?error");
        }

        final LogoutConfigurer<B> logoutConfigurer = getBuilder().getConfigurer(
                LogoutConfigurer.class);
        if (logoutConfigurer != null && !logoutConfigurer.isCustomLogoutSuccess()) {
            logoutConfigurer.logoutSuccessUrl(loginPage + "?logout");
        }
....
    }

如果只配置loginPage而不配置loginProcessingUrl的话

那么loginProcessingUrl默认就是loginPage

你配置的loginPage("/testpage.html") ,那么loginProcessingUrl就是"/testpage.html"

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文