Spring Security

Spring Security源码分析四:Spring Social实现微信社交登录

霸气de小男生 提交于 2019-11-30 07:54:04
社交登录又称作社会化登录(Social Login),是指网站的用户可以使用腾讯QQ、人人网、开心网、新浪微博、搜狐微博、腾讯微博、淘宝、豆瓣、MSN、Google等社会化媒体账号登录该网站。 前言 在上一章 Spring-Security源码分析三-Spring-Social社交登录过程 中,我们已经实现了使用 Spring Social + Security 的QQ社交登录。本章我们将实现微信的社交登录。(微信和QQ登录的大体流程相同,但存在一些细节上的差异,下面我们来简单实现一下) 准备工作 熟悉 OAuth2.0协议标准 ,微信登录是基于 OAuth2.0中的authorization_code模式 的授权登录; 微信开放平台 申请网站应用开发,获取 appid 和 appsecret 熟读 网站应用微信登录开发指南 参考 Spring-Security源码分析三-Spring-Social社交登录过程 的准备工作 为了方便大家测试,博主在某宝租用了一个月的appid和appSecret appid wxfd6965ab1fc6adb2 appsecret 66bb4566de776ac699ec1dbed0cc3dd1 目录结构 参考 api 定义api绑定的公共接口 config 微信的一些配置信息 connect 与服务提供商建立连接所需的一些类。

SpringSercurity基本原理

馋奶兔 提交于 2019-11-30 07:13:25
spring sercurity 基础 环境配置: win10 idea 2019.1 jdk1.8 spring cloud Finchley.RELEASE spring-boot 2.0.2.RELEASE git && gitee.com 基本原理 一系列的过滤器组成的链路.如下图: FilterSercurityInterceptor 就是spring security 处理鉴权 的入口,在访问REST api 前都会经过这个过滤器,如果通过了鉴权才会跳转到对应api的入口 下面来分析在默认开启spring security的情况下各种场景的一些执行路径,通过流程图展示出来; 对应操作 : 打断点在 FilterSecurityInterceptor.doFilter() 上,即可追踪其执行路径 未登录,请求REST api 已登录,请求REST api,权限不够 已登录,请求REST api,权限足够 自定义用户认证逻辑 自定义认证配置信息: 需要继承 WebSecurityConfigurerAdapter ,并重写其 configure() 方法. @Configuration public class SecurityConfig extends WebSecurityConfigurerAdapter { /** * 说明: 重写security的配置方法 *

Spring Security之用户名+密码登录

笑着哭i 提交于 2019-11-30 07:13:12
自定义用户认证逻辑 处理用户信息获取逻辑 实现UserDetailsService接口 @Service public class MyUserDetailsService implements UserDetailsService { private Logger logger = LoggerFactory.getLogger(getClass()); @Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { logger.info("根据用户名查找用户信息,登录用户名:" + username); // 从数据库查询相关的密码和权限,这里返回一个假的数据 // 用户名,密码,权限 return new User(username, "123456", AuthorityUtils.commaSeparatedStringToAuthorityList("admin")); } } 处理用户校验逻辑 UserDetails接口的一些方法,封装了登录时的一些信息 public interface UserDetails extends Serializable { /** 权限信息 * Returns the authorities

Spring Security 实战干货: 登录后返回 JWT Token

被刻印的时光 ゝ 提交于 2019-11-30 07:12:53
1. 前言 欢迎阅读 Spring Security 实战干货 系列文章 , 上一文 我们实现了 JWT 工具。本篇我们将一起探讨如何将 JWT 与 Spring Security 结合起来,在认证成功后不再跳转到指定页面而是直接返回 JWT Token 。 本文的** DEMO 可通过文末的方式获取** 2. 流程 JWT 适用于前后端分离。我们在登录成功后不在跳转到首页,将会直接返回 JWT Token 对(DEMO中为 JwtTokenPair ),登录失败后返回认证失败相关的信息。 3. 实现登录成功/失败返回逻辑 如果你看过 Spring Security 实战干货: 玩转自定义登录 将非常容易理解下面的做法。 3.1 AuthenticationSuccessHandler 返回 JWT Token AuthenticationSuccessHandler 用于处理登录成功后的逻辑,我们编写实现并注入 Spring IoC 容器: /** * 处理登录成功后返回 JWT Token 对. * * @param jwtTokenGenerator the jwt token generator * @return the authentication success handler */ @Bean public AuthenticationSuccessHandler

Spring Security 实战干货:路径Uri中的 Ant 风格

帅比萌擦擦* 提交于 2019-11-30 07:12:43
1. 前言 我们经常在读到一些文章会遇到 uri 支持 Ant 风格 ,而且这个东西在 Spring MVC 和 Spring Security 中经常被提及。这到底是什么呢?今天我们来学习了解一下。这对我们学习 Spring MVC 和 Spring Security 十分必要。 2. Ant 风格 说白了 Ant 风格就是一种路径匹配表达式。主要用来对 uri 的匹配。其实跟正则表达式作用是一样的,只不过正则表达式适用面更加宽泛, Ant 仅仅用于路径匹配。 3. Ant 通配符 Ant 中的通配符有三种: ? 匹配任何单字符 * 匹配0或者任意数量的 字符 ** 匹配0或者更多的 目录 这里注意了单个 * 是在一个目录内进行匹配。 而 ** 是可以匹配多个目录,一定不要迷糊。 3.1 Ant 通配符示例 通配符 示例 说明 ? /ant/p?ttern 匹配项目根路径下 /ant/pattern 和 /ant/pXttern , 但是不包括 /ant/pttern * /ant/*.html 匹配项目根路径下所有在 ant 路径下的 .html 文件 * /ant/*/path /ant/path 、 /ant/a/path 、 /ant/bxx/path 都匹配,不匹配 /ant/axx/bxx/path ** /ant/**/path /ant/path 、 /ant/a

Spring Security 实战干货:玩转自定义登录

假装没事ソ 提交于 2019-11-30 07:12:17
1. 前言 前面的关于 Spring Security 相关的文章只是一个预热。为了接下来更好的实战,如果你错过了请从 Spring Security 实战系列 开始。安全访问的第一步就是认证( Authentication ),认证的第一步就是登录。今天我们要通过对 Spring Security 的自定义,来设计一个可扩展,可伸缩的 form 登录功能。 2. form 登录的流程 下面是 form 登录的基本流程: 只要是 form 登录基本都能转化为上面的流程。接下来我们看看 Spring Security 是如何处理的。 3. Spring Security 中的登录 昨天 Spring Security 实战干货:自定义配置类入口WebSecurityConfigurerAdapter 中已经讲到了我们通常的自定义访问控制主要是通过 HttpSecurity 来构建的。默认它提供了三种登录方式: formLogin() 普通表单登录 oauth2Login() 基于 OAuth2.0 认证/授权协议 openidLogin() 基于 OpenID 身份认证规范 以上三种方式统统是 AbstractAuthenticationFilterConfigurer 实现的, 4. HttpSecurity 中的 form 表单登录 启用表单登录通过两种方式一种是通过

Spring5 高级编程-第一章 Spring 介绍

亡梦爱人 提交于 2019-11-30 00:24:26
第一章 Spring 介绍 本章主要介绍 Spring 框架,无代码示例和说明。 Spring 的第一个版本于 2002 年 10 月发布,由一个带有易于配置和使用的控制反转(IcC)容器的小型内核组成。 1.1 什么是 Spring 整体性定义 Spring 原则: 最轻的影响 。其轻量级仅针对 Spring Core ,额外的 Spring 组件需要更紧密地与 Spring 框架耦合。 1.1.1 Spring 框架的演变 Spring 0.9:第一个公开发布的版本 Spring 1.x:第一个带有官方参考文档的版本,由七个模块组成 Spring Core:bean容器以及支持的实用程序 Spring Context: Application Context、UI、验证、JNDI、Enterprise Java Bean(EB)、远程处理和邮件支持 Spring DAO:事务基础结构、Java Database Connectivity(JDBC)和数据访问对象(DAO)支持 Spring ORM: Hibernate、iBATIS 和 Java Data Object(JDO)支持。 Spring AOP:符合AOP联盟的面向方面编程(AOP)实现 Spring Web:基本集成功能,比如多部分功能、通过 servlet侦听器进行上下文初始化以及面向 Web 的应用程序上下文

记安全测试那些事

落爺英雄遲暮 提交于 2019-11-29 21:37:33
安全测试又来了。。。。。 第一次 登录请求 要求登陆过一次不能重复登录 跟测试杠了好久 还是按照人家要求改了。 这次 安全测试更多的都是一些 遗漏的问题 开发环境都没配置 加上就好了。 1. 使用普通用户yscs 1 去执行字典管理的P OST 修改请求,可成功修改,故存在垂直越权漏洞。 解决方案: spring security 和shiro加上权限角色校验即可。 2.未授权访问漏洞 解决方案: 测试要求静态资源也不能访问。权限框架加上拦截就行 3. 发现系统存在缓慢HTTP POST DoS攻击漏洞(Slow HTTP Denial Of Service Attack)。 解决方案:用的tomcat 。测试用了个工具模拟缓慢请求。修改tomcat 连接数和 connectionTimeOut就行 改短点。实际上应该 加上 ip和超时限制。 4.跨站请求访问漏洞 解决方案: 1、请求中增加token验证。2、验证请求头中的referer。 没别的 加拦截器 、过滤器校验就行 5. 发现系统cookie未设置httponly标签 解决方案:设置cookie 的httponly属性为true. 来源: https://my.oschina.net/u/3065626/blog/3107100

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

北慕城南 提交于 2019-11-29 18:36:52
一、数据库表设计 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) DEFAULT '' COMMENT '权限描述', `name` varchar(255) DEFAULT '' COMMENT '权限名称', `pid` varchar(255) DEFAULT '' COMMENT '父节点', `url` varchar(255) DEFAULT '' COMMENT '授权链接', `create_time` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '创建时间', `update_time` datetime DEFAULT NULL ON UPDATE CURRENT

Springsecurity之jsp中url方式控制权限

故事扮演 提交于 2019-11-29 09:27:22
注:Springsecurity版本是4.2.4.RELEASE。 在jsp中使用has('role')的方式可以看下我的 这篇博客 。 1、引入maven依赖 List-1.1 <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-taglibs</artifactId> <version>4.2.4.RELEASE</version> </dependency> 2、xml配置 List-2.1 <bean id="webInvocationFilter" class="org.springframework.security.web.access.DefaultWebInvocationPrivilegeEvaluator"> <constructor-arg ref="filterSecurityInterceptor"/> </bean> <security:http entry-point-ref="xx" use-expressions="true"> ... </security:http> 如List-2.1所示,单独定义个DefaultWebInvocationPrivilegeEvaluator的bean就可以了