Spring Security

Spring Security 授权认证部分学习记录

大憨熊 提交于 2020-02-25 15:56:43
Spring Security官方文档 Spring Security和Shiro都是安全框架,其中包含了很多内容本文主要记录一下自己理解的授权认证部分希望能表达的尽量简洁和完整,欢迎交流。 formlogin主体流程 其中认证相关Filter负责构建Token实体(未认证),并交给AuthenticationProvider进行验证Token并重新构建Token实体(已认证)。具体可参见org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter内源码。 还包含其它认证流程如BasicAuthenticationFilter,DigestAuthenticationFilter等,官方给的formlogin就是UsernamePasswordAuthenticationFilter相关的一整套流程,有兴趣的话可以看下formlogin这个方法对应的源码,其中包含了很多内容这里主要记录的是认证授权。 配置说明 @Configuration @EnableWebSecurity public class SecurityConfiguration extends WebSecurityConfigurerAdapter { /** *

2020 年 Java 程序员应该学习什么?

回眸只為那壹抹淺笑 提交于 2020-01-10 14:29:26
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 大家好,我相信大家在新的一年都有一个良好的开端,并准备好制定一个提升自我技术的目标。作为 Java 开发人员,我还制定了一些目标,希望在今年成为一名更好的 Java 开发人员。 如果你尚未制定目标,这将帮助你制定 2020 年的目标。作为一名程序员,我们面临的最大挑战是使自己保持不断学习的状态。技术变化非常快,每两年你就会看到新版本的编程语言和框架。 今年也有很多的变化,每 6 个月更新一次 Java 新版本、Spring 5、Spring Security 5 和 Spring Boot 2,对于 Java 开发人员而言,这可能是最繁忙的一年。 2019 年的时候,我以为 Java 11 是新的,在我无法完全学习 Java 11 之前,Java 12 和 Java 13 已经为我们准备好了。自 JDK 9 以来,所有这些 Java 版本都具有许多令人兴奋的功能,例如文本块(多行字符串),switch 表达式,局部变量的 var,API 增强,GC 改进,线程本地握手(机制优化)等,我真的很高兴能在 2020 年学到这些内容。 Spring framework 和 Spring Security 也是如此的,我还不知道 Spring 4.0 和 Spring Security 4.0 上的所有更改

2020年Java程序员应该学习的10大技术

点点圈 提交于 2020-01-09 10:57:46
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 对于Java开发人员来说,最近几年的时间中,Java生态诞生了很多东西。每6个月更新一次Java版本,以及发布很多流行的框架,如Spring 5、Spring Security 5和Spring Boot 2等,这些都给我们带来了很大的挑战。 在2019年初,我认为Java 10还是比较新的,但是,在我学习完所有Java 10的特性之前,Java 11、Java 12、Java 12 已经接踵而至,对于工作繁忙的程序员们来说,大多数人都根本没有时间看这些。基本是都是了解一些有用的新特性而已。 Java的版本迭代速度实在是太快了,也带来了很多有趣的特性,如本地变量类型推断、switch表达式、文本块支持等。我在 Java 9 ← 2017,2019 Java → 13 ,都发生了什么? 中记录了这些变化。 Java系第一大框架,Spring亦是如此,很多人的项目还在用Spring Security 3.1 ,甚至不知道Spring 4.0和Spring Security 4.0都有哪些特性。但是,Spring和Spring Security都已经出到了5.0版本。 以下是我列出的2020年Java开发者应该学习的技术: 1、DevOps (Docker and Jenkins) 过去的一年

权限系统框架搭建(Spring Boot + Spring Security + MyBatis-Plus + Beetl) 未完待续~

萝らか妹 提交于 2020-01-07 15:18:36
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 一、数据库表设计 SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; -- ---------------------------- -- Table structure for sys_permission -- ---------------------------- DROP TABLE IF EXISTS `sys_permission`; CREATE TABLE `sys_permission` ( `id` varchar(255) NOT NULL DEFAULT '', `description` varchar(255) NOT NULL DEFAULT '' COMMENT '权限描述', `name` varchar(255) NOT NULL DEFAULT '' COMMENT '权限名称', `pid` varchar(255) NOT NULL DEFAULT '' COMMENT '父节点', `url` varchar(255) NOT NULL DEFAULT '' COMMENT '授权链接', `create_time` datetime NOT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT

Spring Security详解

落爺英雄遲暮 提交于 2020-01-07 03:48:38
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 要使用Spring Security,首先当然是得要加上依赖 <dependency> <groupId> org.springframework.boot </groupId> <artifactId> spring-boot-starter-security </artifactId> </dependency> 这个时候我们不在配置文件中做任何配置,随便写一个Controller @RestController public class TestController { @GetMapping ( "/hello" ) public String request () { return "hello" ; } } 启动项目,我们会发现有这么一段日志 2020-01-05 01:57:16.482 INFO 3932 --- [ main] .s.s.UserDetailsServiceAutoConfiguration : Using generated security password: 1f0b4e14-1d4c-4dc8-ac32-6d84524a57dc 此时表示Security生效,默认对项目进行了保护,我们访问该Controller中的接口,会见到如下登录界面 这里面的用户名和密码是什么呢

SpringBoot配置SpringSecurity,实现JSON登陆权限验证

[亡魂溺海] 提交于 2020-01-06 21:58:07
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 官方例子: https://spring.io/guides/gs/securing-web/ 1. 在项目中添加spring-security引用 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> 这个时候,启动项目,在浏览器中访问项目会跳到spring security提供的默认的登陆页面,这一般不是我们需要的,需要我们指定我们自己的登陆页面。 2. 修改默认的登陆页面 添加配置,如下面代码所示: @EnableWebSecurity @Configuration public class GmSecurityConfig extends WebSecurityConfigurerAdapter{ private Logger logger = LoggerFactory.getLogger(GmSecurityConfig.class); @Autowired private ApplicationContext appContext; @Override public void configure

Springsecurity之SecurityContext

家住魔仙堡 提交于 2019-12-27 18:43:19
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 先上一张图,如下图1所示,SecurityContext只有俩个方法,即getAuthentication()和setAuthentication(),如下: 图1 SecurityContext的类图 图2 SecurityContextHolder 而SecurityContextHolder则,保存的是SecurityContext,最常使用的就是SecurityContextHolder的getContext()方法。 SecurityContextHolder、SecurityContextHolderStrategy、SecurityContext紧密联系,我们虽然调用的是SecurityContextHolder.getContxt(),但它却委托给了SecurityContextHolderStrategy,SecurityContext是保存在SecurityContextHolderStrategy中的。类图如下图3所示,此图来自于《Pro Spring Security》的Chapter3,建议读者阅读原文: 图3 SecurityContextHolder、SecurityContextHolderStrategy、SecurityContext的类图

Springsecurity之SecurityContextHolderStrategy

﹥>﹥吖頭↗ 提交于 2019-12-27 18:20:03
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 注:下面分析的版本是spring-security-4.2.x,源码的github地址是: https://github.com/spring-projects/spring-security/tree/4.2.x 先上一张图: 图1 SecurityContextHolderStrategy的三个实现类 1. ThreadLocalSecurityContextHolderStrategy 它里面使用的是ThreadLocal,如下List-1所示: List-1 private static final ThreadLocal<SecurityContext> contextHolder = new ThreadLocal<SecurityContext>(); 2.InheritableThreadLocalSecurityContextHolderStrategy 它里面使用的是InheritableThreadLocal,如下List-2所示: List-2 private static final ThreadLocal<SecurityContext> contextHolder = new InheritableThreadLocal<SecurityContext>();

mall整合SpringSecurity和JWT实现认证和授权(一)

一世执手 提交于 2019-12-26 09:31:05
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 本文主要讲解mall通过整合SpringSecurity和JWT实现后台用户的登录和授权功能,同时改造Swagger-UI的配置使其可以自动记住登录令牌进行发送。 SpringBoot实战电商项目mall(25k+star)地址: https://github.com/macrozheng/mall 项目使用框架介绍 SpringSecurity SpringSecurity是一个强大的可高度定制的认证和授权框架,对于Spring应用来说它是一套Web安全标准。SpringSecurity注重于为Java应用提供认证和授权功能,像所有的Spring项目一样,它对自定义需求具有强大的扩展性。 JWT JWT是JSON WEB TOKEN的缩写,它是基于 RFC 7519 标准定义的一种可以安全传输的的JSON对象,由于使用了数字签名,所以是可信任和安全的。 JWT的组成 JWT token的格式:header.payload.signature header中用于存放签名的生成算法 {"alg": "HS512"} payload中用于存放用户名、token的生成时间和过期时间 {"sub":"admin","created":1489079981393,"exp":1489684781}

10. Spring Boot中Spring Security权限控制

爱⌒轻易说出口 提交于 2019-12-25 15:58:02
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> Spring Security权限控制可以配合授权注解使用。接着上一节,要开启这些注解,只需要在Spring Security配置文件中添加注解: @Configuration @EnableGlobalMethodSecurity(prePostEnabled = true) public class BrowserSecurityConfig extends WebSecurityConfigurerAdapter { ... } 在 UserDetailService 中,我们给当前登录用户授予了”admin”的权限,我们将这块代码改造一下:当登录用户为admin的时候,其拥有”admin”权限,其他用户则只有”test”权限: @Configuration public class UserDetailService implements UserDetailsService { @Autowired private PasswordEncoder passwordEncoder; @Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { // 模拟一个用户