(二)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自定义页面
在前面的篇幅中,我们对认证和授权流程大致梳理了一遍.在这个过程中我们一直都是使用系统生成的默认页面,登录成功后也是直接调转到根路径页面.而在实际的开发过程中,我们是需要自定义登录页面的,有时还会添加各 ...
随机推荐
- Linux中的iptables防火墙策略
0x01 简介 iptables其实不是真正的防火墙,我们可以把它理解成一个客户端代理,用户通过iptables这个代理,将用户的安全设定执行到对应的"安全框架"中,这个" ...
- django部署后样式加载不出来解决方案
django部署后样式加载不出来 1.html文件去掉<!DOCTYPE html> 2. location /static { alias /home/static/; } 3.STAT ...
- 【Vue.js游戏机实战】- Vue.js实现老虎-机抽奖总结
大家好!先上图看看本次案例的整体效果. 完整版实战课程附源码:[Vue.js游戏机实战]- Vue.js实现老虎-机抽奖 实现思路: Vue component实现老虎-机组件,可以嵌套到任意要使用的 ...
- JS实现文字向上无缝滚动轮播
效果图: 全部代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset=&quo ...
- php异步处理
<?php namespace Index\Controller; use Core\Controller; class test extends Controller { public fun ...
- Javascript事件派发-dispatchEvent
事件派发的作用: 1.派发数据,将一个封闭模块中的数据传递给另一个封闭模块.2.事件完成了较为复杂的解耦. 事件和回调函数不同在于: 1.事件可以在任意地方去获取,而回调函数只能在一个地方存在,如果需 ...
- etcd常用命令记录
etcd常用命令记录 1.查看etcd的版本 [root@etcd01 ssl]# curl -L http://127.0.0.1:2379/version {"etcdserver& ...
- Flutter -------- 新手 WanAndroid 项目练习
一个简单Flutter项目wanandroid,先前用Kotlin来开发过,适合新手练习. 用到的库 包含功能: http+数据解析 网络请求数据列表展示 Banner轮播 WebView跳转详情 D ...
- 深度学习:21天实战caffe学习资源-4-环境安装
使用anaconda3环境下的python2.7, 机器macos mojave 10.14 1.安装Xcode 首先现在app store中安装Xcode: 不然会有” framework not ...
- dapperHelper
public class DapperHelper { /// 数据库连接名 private static string _connection = string.Empty; /// 获取连接名 p ...