(二)spring Security 自定义登录页面与校验用户
使用 Spring Boot 的快速创建项目功能,勾选上本篇博客需要的功能:web,security,thymeleaf ;
配置 security
/**
* 对 security 的配置
*
* @author yiaz
* @date 2019年3月18日14:04:55
*/
@EnableWebSecurity
public class WebSecurityConfig {
/**
* 创建 springSecurityFilterChain 拦截器
*
* @return
*/
@Bean
public WebMvcConfigurer webMvcConfigurer() {
return new WebMvcConfigurer() {
};
}
/**
* 注册 springSecurityFilterChain 拦截器
*
* @return
*/
@Bean
public AbstractSecurityWebApplicationInitializer abstractSecurityWebApplicationInitializer() {
return new AbstractSecurityWebApplicationInitializer() {
};
}
/**
* 配置用户名和密码和拥有的角色,此时只做硬编码,后面会改成数据库中动态获取
*
* @return
* @throws Exception
*/
@Bean
public UserDetailsService userDetailsService() throws Exception {
InMemoryUserDetailsManager manager = new InMemoryUserDetailsManager();
manager.createUser(User.withDefaultPasswordEncoder().username("user").password("password").roles("USER").build());
return manager;
}
/**
* 配置对哪些路径进行拦截,如果方法里面什么都不写,则不拦截任何路径;
* <p>
* 如果,使用 super.configure(http),父类的方法:
* ((HttpSecurity)((HttpSecurity)((AuthorizedUrl)http.authorizeRequests().anyRequest()).authenticated().and()).formLogin().and()).httpBasic();
* <p>
* 我们自定义下拦截规则;
*
* @return
*/
@Bean
public WebSecurityConfigurerAdapter webSecurityConfigurerAdapter() {
return new WebSecurityConfigurerAdapter() {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
// 拦截所有请求,静态资源等特定请求需要放放行,在这里配置
.anyRequest().authenticated()
.and()
.formLogin()
// 地址写的是 映射的路径
.loginPage("/login")
.permitAll()
// 第二个参数,如果不写成true,则默认登录成功以后,访问之前被拦截的页面,而非去我们规定的页面
.defaultSuccessUrl("/index.html", true)
.and()
.logout()
.logoutUrl("/logout")
.and()
// 关闭下 CSRF ,否则表单得不到提交,或者在表单里面添加一个 hidden 属性,提交csrf;
.csrf()
.disable()
.httpBasic();
}
};
}
}
配置下 MVC
上面配置的自定义登陆界面的地址映射,需要在下面 MVC 里面配置下:

@Configuration
public class MvcConfig {
@Bean
public WebMvcConfigurerAdapter webMvcConfigurerAdapter() {
return new WebMvcConfigurerAdapter() {
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/login").setViewName("login");
registry.addViewController("/login.html").setViewName("login");
}
};
}
}
自定义登录页面
在 thymeleaf 文件夹下面新建一个 login.html :
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
首页<br>
thymeleaf
<!--自定义登录页面,如果想要用内存中的用户,想security,自己帮我们校验的话,则提交地址必须是 /login -->
<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>
<!-- 这里的 username,password 也不能改动,因为security帮我们校验的时候,就是用它来接受参数的-->
<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>
<!-- 本来官网上给出这个东西的,但是不知道,为啥不会获取到对应的值,因此在上面配置的时候,直接关闭 csrf -->
<input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/>
<button class="btn btn-lg btn-primary btn-block" type="submit">Sign in</button>
</form>
</body>
</html>
自定义一个登陆成功欢迎页面
在静态文件夹 static 文件夹下面新建一个 index.html ;
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
首页<br>
static
</body>
</html>
上面我们配置了成功登陆,就将页面重定向到这里;
效果图
访问任何
URL都会被拦截,然后重定向我们规定的首页:
登陆
使用之前硬编码配置的用户名和密码登陆;

登陆成功以后,页面会被重定向配置的欢迎页:

Spring Security 自定义登陆页面就是这么简单,可以参照官网文档 自己慢慢摸索;
小结:
如果你不想提交的表单的用户名和密码,必须是 username,password,则在我们的配置类中,自定义规则的里面进行更改下:
@Bean
public WebSecurityConfigurerAdapter webSecurityConfigurerAdapter() {
return new WebSecurityConfigurerAdapter() {
@Override
protected void configure(HttpSecurity http) throws Exception {
...
.formLogin()
.passwordParameter("你想要的密码name")
.usernameParameter("你想要的用户名name")
.and()
...
}
};
}
(二)spring Security 自定义登录页面与校验用户的更多相关文章
- Spring Security 自定义登录页面
SpringMVC + Spring Security,自定义登录页面登录验证 学习参考:http://www.mkyong.com/spring-security/spring-security-f ...
- Spring Security 自定义登录认证(二)
一.前言 本篇文章将讲述Spring Security自定义登录认证校验用户名.密码,自定义密码加密方式,以及在前后端分离的情况下认证失败或成功处理返回json格式数据 温馨小提示:Spring Se ...
- Spring Security自定义认证页面(动态网页解决方案+静态网页解决方案)--练气中期圆满
写在前面 上一回我们简单分析了spring security拦截器链的加载流程,我们还有一些简单的问题没有解决.如何自定义登录页面?如何通过数据库获取用户权限信息? 今天主要解决如何配置自定义认证页面 ...
- Spring Boot整合Spring Security自定义登录实战
本文主要介绍在Spring Boot中整合Spring Security,对于Spring Boot配置及使用不做过多介绍,还不了解的同学可以先学习下Spring Boot. 本demo所用Sprin ...
- spring boot 下 spring security 自定义登录配置与form-login属性详解
package zhet.sprintBoot; import org.springframework.beans.factory.annotation.Autowired;import org.sp ...
- Spring Security入门(3-1)Spring Security的登录页面定制
- Spring security 知识笔记【自定义登录页面】
一.引入依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId> ...
- spring security动态管理资源结合自定义登录页面
如果想将动态管理资源与自定义登录页面一起使用,最简单的办法就是在数据库中将登录页面对应的权限设置为IS_AUTHENTICATED_ANONYMOUSLY. 因此在数据库中添加一条资源信息. INSE ...
- 【认证与授权】Spring Security自定义页面
在前面的篇幅中,我们对认证和授权流程大致梳理了一遍.在这个过程中我们一直都是使用系统生成的默认页面,登录成功后也是直接调转到根路径页面.而在实际的开发过程中,我们是需要自定义登录页面的,有时还会添加各 ...
随机推荐
- WSL2(Ubuntu)安装Postgres
原文链接:https://www.xu.ci/2019/12/wsl2ubuntupostgres.html 原文作者:博客园--曲高终和寡 *******************如果你看到这一行,说 ...
- 20190710用控制台启动一个wcf服务
快速阅读 如何用控制台启动一个wcf服务,已经wcf的配置和在类库中如何实现 . wcf类库 用vs新建一个类库,引用system.ServiceModel 定义接口实现服务契约和操作契约 [Serv ...
- 常用app分类
西瓜视频 今日头条(极速版) 喜马拉雅 扫描全能王 蜻蜓FM 每天影视 抖音 小读 樊登读书 微信读书 懒人听书 京东 找靓机 拼多多 淘宝 小米有品 当当 什么值得买 小米商城 淘票票 懂车帝 小红 ...
- python No module named 'urlparse'
python3中,取消了urlparse 引用方式改为了: from urllib import parse
- 基因表达半衰期 | mRNA Half-Life
做单细胞RNA-seq分析,自然就能想到我们测到的其实是一个概率学的东西,就像女士品茶里的酵母的泊松分布一样. 真实的细胞里,一切都是连续的,从DNA到mRNA到蛋白,是有一个时间间隔的,每一个pro ...
- 刷新指定窗口页面的gridTable数据
top.frames[windowName].$("#gridTable").trigger("reloadGrid"); 其中”windowName即是窗口页 ...
- Android 自定义View 四个构造函数详解
https://blog.csdn.net/zhao123h/article/details/52210732 在开发android开发过程中,很多人都会遇到自定义view,一般都需要继承自View类 ...
- supervisord守护进程的使用
原文链接:http://blog.csdn.net/xyang81/article/details/51555473 Supervisor(http://supervisord.org/)是用Pyth ...
- PHP 自动加载类
类的自动加载 (Autoloading Classes) 在编写面向对象(OOP) 程序时,很多开发者为每个类新建一个 PHP 文件. 这会带来一个烦恼:每个脚本的开头,都需要包含(include)一 ...
- CentOS 7 配置 nginx php-fpm 详细教程
CentOS 7 配置 Nginx 的步骤如下: 首先更新 yum,没有安装 yum 的自行安装 yum update 1. 安装 Nginx yum install nginx 开启 Nginx 并 ...