(一)Spring Security Demo 登陆与退出
下面的代码需要spring环境的支持;
看这个系列博客之前,需要这个博客,大概了解下 spring secutity 文档
配置springSecurityFilterChain过滤器
第一步
写一个类,继承
WebSecurityConfigurerAdapter类,并且实现WebMvcConfigurer接口;package cn.hyc.config; import org.springframework.context.annotation.Bean;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.provisioning.InMemoryUserDetailsManager;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; /**
* 跟 springSecurityFilterChain 有关的 过滤器
*/
@EnableWebSecurity
public class WebSecurityConfig implements WebMvcConfigurer { /**
* 配置认证用户信息,有好多种方法,这里只是最简单一种,写死在代码里面
* @return
*/
@Bean
public UserDetailsService userDetailsService() {
InMemoryUserDetailsManager manager = new InMemoryUserDetailsManager();
manager.createUser(User.withDefaultPasswordEncoder().username("user").password("password").roles("USER").build());
return manager;
} }第二步
然后再写一个类 ,继承
AbstractSecurityWebApplicationInitializer类package cn.hyc.config; import org.springframework.security.web.context.AbstractSecurityWebApplicationInitializer; /**
*
*
* 配置 springSecurityFilterChain 拦截器,拦截所有的请求
*/
public class SecurityWebApplicationInitializer
extends AbstractSecurityWebApplicationInitializer { }
以上两步,就完成了
springSecurityFilterChain拦截器的注册,这个拦截器的名字,如果用配置文件配置,名字是不可以变的,这里用官网的教程,直接写上面的两个类,就可以完成springSecurityFilterChain的注册;
配置身份验证
在之前的第一步的 WebSecurityConfig 类里面,我们配置了一个用户身份信息,现在,我们需要告诉 Spring Security 都对哪些 URL 进行校验;
我们让我们写的 WebSecurityConfig 类,再继承 WebSecurityConfigurerAdapter类,覆写 configure(HttpSecurity http) 方法,在里面进行配置 URL;
package cn.hyc.config;
import org.springframework.context.annotation.Bean;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.provisioning.InMemoryUserDetailsManager;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
/**
* 跟 springSecurityFilterChain 有关的 过滤器
*/
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter implements WebMvcConfigurer {
/**
* 认证用户信息
* @return
*/
@Bean
public UserDetailsService userDetailsService() {
InMemoryUserDetailsManager manager = new InMemoryUserDetailsManager();
manager.createUser(User.withDefaultPasswordEncoder().username("user").password("password").roles("USER").build());
return manager;
}
/**
* 对 哪些 URL 进行身份验证
* @param http
* @throws Exception
*/
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.anyRequest().authenticated()
.and()
.formLogin()
.and()
.logout()
.logoutUrl("/logout")
.and()
.httpBasic();
}
}
加载配置
我们的 WebSecurityConfig 类,就是一个配置类,我们需要将它加载到容器里面,使用下面的类,去完成加载;
package cn.hyc.config;
import org.springframework.lang.Nullable;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
/**
* 确保 WebSecurityConfig.class 得到加载
*/
public class MvcWebApplicationInitializer extends
AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class<?>[] getRootConfigClasses() {
// 这里,写上配置类的名字
return new Class[] { WebSecurityConfig.class };
}
@Nullable
@Override
protected Class<?>[] getServletConfigClasses() {
return new Class[0];
}
@Override
protected String[] getServletMappings() {
return new String[0];
}
// ... other overrides ...
}
登陆项目
这时候启动项目,可以看到下面的界面,并且我们访问任何 URL ,都会被拦截,然后重定向到这里,因为我们没有通过身份验证:

因为我们自己没有写页面,也没做任何控制层的处理,直接访问,spring Security 会自动的生成一个登陆页面,并且会帮我们进行用户名、密码的校验;
身份验证成功以后,spring security会调到我们自己没验证的时候,想要访问的页面;
这里我们是基于内存用户登陆的,因为前面的配置类里面,配置的就是在内存中用户,暂时不涉及到 JDBC 操作 ;
退出
在spring security中,默认访问 /logout 即代表你要退出:

,然后默认的重定向到 /login?logout

当然上面这些,我们也可以在在配置里面,进行自定义,怎么配置,在 大概了解下 spring secutity 文档 里面都有讲,不再累述;
(一)Spring Security Demo 登陆与退出的更多相关文章
- Spring Security(10)——退出登录logout
要实现退出登录的功能我们需要在http元素下定义logout元素,这样Spring Security将自动为我们添加用于处理退出登录的过滤器LogoutFilter到FilterChain.当我们指定 ...
- Spring Security 无法登陆,报错:There is no PasswordEncoder mapped for the id “null”
编写好继承了WebSecurityConfigurerAdapter类的WebSecurityConfig类后,我们需要在configure(AuthenticationManagerBuilder ...
- Spring Security 指定登陆入口
spring security除通过form-login的熟悉指定登陆还可以通过entry-point-ref 指定登陆入口.具体配置如下: <?xml version="1.0&qu ...
- bug日志-天坑,Spring Security的登陆报错:An internal error occurred while trying to authenticate the user.
在学习Spring Security的时候,我的编辑器给我报错:An internal error occurred while trying to authenticate the user. 明明 ...
- Spring Security 自定义 登陆 权限验证
转载于:https://www.jianshu.com/p/6b8fb59b614b 项目简介 基于Spring Cloud 的项目,Spring Cloud是在Spring Boot上搭建的所以按照 ...
- spring security demo
直接上代码. 这个类似于配置一个shiro.xml redis.xml boot 里面xml用注解取代. 启动类 验证启用: 退出: end. spring 官网 start.spring.io
- spring security入门demo
一.前言 因项目需要引入spring security权限框架,而之前也没接触过这个一门,于是就花了点时间弄了个小demo出来,说实话,刚开始接触这个确实有点懵,看网上资料写的权限大都是静态,即就是在 ...
- 用Spring Security, JWT, Vue实现一个前后端分离无状态认证Demo
简介 完整代码 https://github.com/PuZhiweizuishuai/SpringSecurity-JWT-Vue-Deom 运行展示 后端 主要展示 Spring Security ...
- Spring Security 实战干货:实现自定义退出登录
文章目录 1. 前言 2. 我们使用 Spring Security 登录后都做了什么 2. 退出登录需要我们做什么 3. Spring Security 中的退出登录 3.1 LogoutFilte ...
随机推荐
- C语言的柔性数组的实现及应用
c编程的时候数组长度一般都是固定好的,实际上c还能实现变长数组.其实c99中确实是有变长数组的说法,C99中通过允许结构体中的最后一个成员是长度未知的数组实现变长数组,其定义格式如下: typedef ...
- 我为什么选择Vim
总看到一些飞快敲击键盘而不用鼠标的时候你可以很羡慕和佩服,其实这完全没有必要.就像一个吉他手熟练地弹吉他有必要羡慕吗?一个瓦匠熟练地砌砖有必要羡慕吗?这些都是他们赖以生存的工具而已,熟练地运用工具是理 ...
- 急急急,tp5的验证码不显示
本地环境phpstudy,使用composer安装tp5,按照看云<ThinkPHP5.0完全开发手册>验证码配置,就是不显示验证码. 使用:<div>{:captcha_im ...
- De1ctf - shell shell shell记录
虽然是N1CTF原题,但是自己没遇见过,还是做的题少,记录一下吧== 1.源码泄露,直接可以下到所有源码,然后代码审计到一处insert型注入: 这里直接带入insert里面,跟进去看看 insert ...
- git提交报错:Updates were rejected because the tip of your current branch is behind
提交代码push时报错:上网查询了一下解决办法有很多种,1.使用强制push的方法:(上网查询说这种会使远程修改丢失,一般是不可取的,尤其是多人协作开发的时候.) git push -u origin ...
- Django 创建数据库表
1.连接数据库之前,我们需要在setting中修改一些内容 2.Django的表是在models中创建的,一个class代表一个数据库表 abstract是为了继承,将该基类定义为抽象类,即不必生成数 ...
- 生成uuid 和 检验
//注意replaceAll前面的是正则表达式 String uuid = UUID.randomUUID().toString().replaceAll("-","&q ...
- postgresql【二】postgresql强制删除数据库
SELECT pg_terminate_backend(pg_stat_activity.pid) FROM pg_stat_activity WHERE datname='db_name' AND ...
- 详解Unity Profiler内存分析问题
在使用Unity开发游戏的过程中,借助Profiler来分析内存使用状况是至关重要的.但许多开发者可能还对Profiler中各项数据表示的含义不甚明确,今天我们Unity官方的技术工程师柳振东,将针对 ...
- 【json/regex】将嵌套对象生成的json文进行内部整形排序后再输出
下载地址:https://files.cnblogs.com/files/xiandedanteng/jsonformat20191126-2.zip 注意:本文仅为draft1版本,还有待完善. 先 ...