使用 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>

上面我们配置了成功登陆,就将页面重定向到这里;


效果图

  1. 访问任何 URL 都会被拦截,然后重定向我们规定的首页:

  2. 登陆

    使用之前硬编码配置的用户名和密码登陆;

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

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 自定义登录页面与校验用户的更多相关文章

  1. Spring Security 自定义登录页面

    SpringMVC + Spring Security,自定义登录页面登录验证 学习参考:http://www.mkyong.com/spring-security/spring-security-f ...

  2. Spring Security 自定义登录认证(二)

    一.前言 本篇文章将讲述Spring Security自定义登录认证校验用户名.密码,自定义密码加密方式,以及在前后端分离的情况下认证失败或成功处理返回json格式数据 温馨小提示:Spring Se ...

  3. Spring Security自定义认证页面(动态网页解决方案+静态网页解决方案)--练气中期圆满

    写在前面 上一回我们简单分析了spring security拦截器链的加载流程,我们还有一些简单的问题没有解决.如何自定义登录页面?如何通过数据库获取用户权限信息? 今天主要解决如何配置自定义认证页面 ...

  4. Spring Boot整合Spring Security自定义登录实战

    本文主要介绍在Spring Boot中整合Spring Security,对于Spring Boot配置及使用不做过多介绍,还不了解的同学可以先学习下Spring Boot. 本demo所用Sprin ...

  5. spring boot 下 spring security 自定义登录配置与form-login属性详解

    package zhet.sprintBoot; import org.springframework.beans.factory.annotation.Autowired;import org.sp ...

  6. Spring Security入门(3-1)Spring Security的登录页面定制

  7. Spring security 知识笔记【自定义登录页面】

    一.引入依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId> ...

  8. spring security动态管理资源结合自定义登录页面

    如果想将动态管理资源与自定义登录页面一起使用,最简单的办法就是在数据库中将登录页面对应的权限设置为IS_AUTHENTICATED_ANONYMOUSLY. 因此在数据库中添加一条资源信息. INSE ...

  9. 【认证与授权】Spring Security自定义页面

    在前面的篇幅中,我们对认证和授权流程大致梳理了一遍.在这个过程中我们一直都是使用系统生成的默认页面,登录成功后也是直接调转到根路径页面.而在实际的开发过程中,我们是需要自定义登录页面的,有时还会添加各 ...

随机推荐

  1. WEB甘特图(机器运行状态图)

    前台框架使用BootStrap轻量级框架AdminLTE 后台框架使用的是Spring.SpringMVC 初此使用数据库SQL Server故只能用JDBC连接 请勿见怪!jsp页面重复添加元素过多 ...

  2. Java Redis缓存穿透/缓存雪崩/缓存击穿,Redis分布式锁实现秒杀,限购等

    package com.example.redisdistlock.controller; import com.example.redisdistlock.util.RedisUtil; impor ...

  3. 3、vueJs基础知识03

    vue过渡(动画) 本质走的css3: transtion ,animation <div id="div1" v-show="bSign" transi ...

  4. RabbitMQ入门学习系列(四) 发布订阅模式

    发布订阅模式 什么时发布订阅模式 把消息发送给多个订阅者.也就是有多个消费端都完整的接收生产者的消息 换句话说 把消息广播给多个消费者 消息模型的核心 RabbitMQ不发送消息给队列,生产者也不知道 ...

  5. DB2 sqlCode-668

    客户端调用命令 CALL SYSPROC.ADMIN_CMD('reorg table tablename')

  6. DELPHI开发LINUX的动态库

    DELPHI开发LINUX的动态库 WINDOWS的动态库是.dll,这个大家都知道. LINUX也有动态库,扩展名是.so,现在DELPHI也能开发LINUX的动态库哦. DELPHI对LINUX的 ...

  7. ubuntu16.04 18.04 Qt5.11安装Gstreamer

    最近因为要做跨平台的视频传输,需要用到linux的解码器,真的是搞死我了 大概讲一下我现在的平台是ubuntu16.04 Qt5.11 ,我现在需要在我的程序中使用视频这一块,无奈linux中,Qt支 ...

  8. Eclipse/STS选择一段文本进行复制变得很卡的解决方案

    网上给出的解决方案是: 更改打开代码超链接按键Ctrl为Alt:Window -> Preferences -> General -> Editors -> Text Edit ...

  9. Visual Studio IronPython CPython

    安装 IronPython - 张善友 - 博客园https://www.cnblogs.com/shanyou/archive/2006/09/14/504580.html VS2017作为pyth ...

  10. Angular 项目打包之后,部署到springboot项目中,刷新访问404解决方法

    解决方法1: app.module.ts文件添加两行代码: import { LocationStrategy, HashLocationStrategy } from '@angular/commo ...