专栏首页信息安全小学生Spring security笔记3/4: 自定义登录页面

Spring security笔记3/4: 自定义登录页面

自定义登录页面

在之前的示例基础上,自定义认证的返回。 对于来自浏览器的请求,将页面重定向到自定义的登录页。 对于来自其他客户端的请求 (比如APP),已 Json 形式返回认证结果。

实现步骤

1. 复制上一示例的源码

重命名包名 case2 为 case3

重命名 Case2Application.java 为 Case3Application.java

2. 在 WebSecurityConfig 中配置登录页

在 config(HttpSecurity http) 方法中对 formLogin 选项进行配置。需要包含以下设置:

  • 放行自定义登录页 url,例如: /login.html;
  • 设置登录跳转页 url, 例如: /login.html;
  • 禁用 csrf 保护。如不添加此项,则需要每次从 cookie 中获取 csrftoken 的值并随表单一同提交到服务端。

完整代码如下:

package net.txt100.learn.springsecurity.base.case3.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;

/**
 * Title: WebSecurityConfig
 * Package: net.txt100.learn.springsecurity.base.case3.config
 * Creation date: 2019-08-11
 * Description:
 *
 * @author <a href="zgjt_tongl@thunis.com">Tonglei</a>
 * @since 1.0
 */
@Configuration
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Bean
    public PasswordEncoder passwordEncoder() {
        // 配置密码的保护策略,spring security 默认使用 bcrypt 加密算法。
        // 此处只要显式声明 BCryptPasswordEncoder Bean 即可
        return new BCryptPasswordEncoder();
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {

        UsernamePasswordAuthenticationFilter up;

        http
            .csrf().disable() // 关闭 CSRF 保护功能,否则不支持 Post 请求
            .authorizeRequests() // 针对 HttpServletRequest 进行安全配置
                .antMatchers("/login.html").permitAll() // login.html 页面无需登录即可访问
                .anyRequest().authenticated() // 对所有 Request 均需安全认证
            .and().formLogin()
                .loginPage("/login.html") // 每当需要登录时浏览器跳转到 login.html 页面
                .loginProcessingUrl("/login") // 自定义登录提交地址,默认地址是 /login, 默认处理器是 UsernamePasswordAuthenticationFilter
//                 .usernameParameter("/phone_number") // 自定义登录用户ID参数,默认是 username
//                 .passwordParameter("/check_code") // 自定义登录口令参数,默认是 password
            .and().httpBasic(); // 定义如何验证用户,此项代表弹出浏览器认证窗口
    }
}

3. 创建 login.html 页面

新建目录 src/main/webapp,并在该目录下创建文件 login.html。需要至少包含:

  • form 标签,并且 action 赋值为 WebSecurityConfig 中 loginProcessingUrl 配置地址 (默认: "/login");
  • 用户名参数,与 WebSecurityConfig 中 usernameParameter 配置一致(默认:"username");
  • 密码参数,与 WebSecurityConfig 中 passwordParameter 配置一致(默认:"password")。

4. 登录测试

  1. 访问 http://localhost:8080/user/all,可以看到进入自定义的登录界面
  1. 输入正确用户名密码,可以访问到被保护资源

总结

spring security 中,开发者可以自定义登录页的

  • 访问地址
  • 认证地址
  • 用户名参数
  • 密码参数

最后不要忘记放开登录页的访问权限。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 小白学Flask第三天| 今天把视图函数的路由给讲清楚!

    大家可以看到输出了一个Map映射的对象,里面有一个列表,列表里就有着路由的详细信息。这里我给大家详细讲解一下里面的内容

    JAVAandPython君
  • [php]Windows环境下Composer的安装教程

    下载Composer-Setup.exe后安装,它会自动搜索 php.exe 路径, 如果找不到,则手动添加路径。

    landv
  • 小白学Flask第二天| app对象的初始化和配置

    难道模板名字叫__main__吗?我应该是我创建的py文件的文件名吗?其实这里有一个小知识点,当我们把某个模板当做启动模板时,那么这个模板的__name__会默...

    JAVAandPython君
  • 一次使用InfluxDB数据库的总结

    因当前的项目需要记录每秒钟服务器的状态信息,例如负载、cpu等等信息,这些数据都是和时间相关联的。 因为一秒钟就要存储挺多的数据。而且我还在前端做了echar...

    Johnson木木
  • 重建本地服务器CentOS 7 yum的阿里安装源以及elasticsearch的IP地址配置

    kibana安装目录的config下,编辑kibana.yml配置文件,添加如下配置:

    算法之名
  • Java转PHP的心路历程

    在2018年的11月7号,我从广州跳槽到一个十八线的小城市工作。跳槽原因是和女朋友接受不了异地,给自己一巴掌先。

    Johnson木木
  • JSON格式化

    我个人主要是做一些后端的工作,比如php、python、c之类的,c比较少,最主要的是php,不过我非常喜欢js,所以经常会愿意去写一些小玩意自娱自乐。

    江湖安得便相忘
  • Vue知识点

    MVVM 是 Model-View-ViewModel 的缩写。 Model代表数据模型,也可以在Model中定义数据修改和操作的业务逻辑。 View 代表...

    杨肆月
  • [nginx]nginx的一个奇葩问题 500 Internal Server Error phpstudy2018

    [nginx]nginx的一个奇葩问题 500 Internal Server Error

    landv
  • 七款好用的项目管理软件

    它是一个在线商业协作和项目管理的平台,主要功能包括:项目管理、里程碑管理、任务、报表、事件、博客、论坛、书签、Wiki、即时消息等。

    O_oPanda

扫码关注云+社区

领取腾讯云代金券