Spring Security

一、Spring Security 表单登录项目

徘徊边缘 提交于 2020-08-13 12:27:39
一、 项目 搭建 依赖 < dependency > < groupId > org.springframework.boot </ groupId > < artifactId > spring-boot-starter-security </ artifactId > </ dependency > 编写一个控制层接口 @RestController public class HelloController { @GetMapping( "/" ) public String hello() { return "登陆成功" ; } } 二、表单登录 启动后访问接口会重定向到登录页 在控制台生成UUID 的临时密码字符串,默认用户名为user Using generated security password: f0af6a0a-fbef-465e-941a-ec9afbaa9af9 登录后我们可访问控制层接口。 三、自定义配置 yml配置 密码是springboot auto配置,在SecurityProperties中定义,所以我们可在yml中自定义。 PasswordEncoder Spring Security 提供了多种密码加密方案,官方推荐使用 BCryptPasswordEncoder,BCryptPasswordEncoder 使用 BCrypt 强哈希函数,

SpringBoot学习笔记(十五:OAuth2 )

◇◆丶佛笑我妖孽 提交于 2020-08-13 09:58:53
@ 目录 一、OAuth 简介 1、什么是OAuth 2、OAuth 角色 3、OAuth 授权流程 4、OAuth授权模式 4.1、授权码 4.2、隐藏式 4.3、密码式 4.4、凭证式 二、实践 1、密码模式 1.1、授权服务器 1.1.1、依赖 1.1.2、授权服务器配置 1.1.3、Spring Security配置 1.2、资源服务器 1.2.1、资源服务器配置 1.2.2、资源服务接口 1.3、测试 1.3.1、获取token 1.3.2、使用获取到的token访问资源接口 2、授权码模式 2.1、应用注册 2.2、具体代码 2.3、测试 一、OAuth 简介 1、什么是OAuth 开放授权(Open Authorization,OAuth)是一种资源提供商用于授权第三方应用代表资源所有者获取有限访问权限的授权机制。由于在整个授权过程中,第三方应用都无须触及用户的密码就可以取得部分资源的使用权限,所以OAuth是安全开放的。 例如,用户想通过 QQ 登录csdn,这时csdn就是一个第三方应用,csdn要访问用户的一些基本信息就需要得到用户的授权,如果用户把自己的 QQ 用户名和密码告诉csdn,那么csdn就能访问用户的所有数据,井且只有用户修改密码才能收回授权,这种授权方式安全隐患很大,如果使用 OAuth ,就能很好地解决这一问题。

通过java程序(JSch)运行远程linux主机上的shell脚本

倖福魔咒の 提交于 2020-08-13 03:30:58
如果您看完文章之后,觉得对您有帮助,请帮我点个赞,您的支持是我不竭的创作动力! 如果您看完文章之后,觉得对您有帮助,请帮我点个赞,您的支持是我不竭的创作动力! 如果您看完文章之后,觉得对您有帮助,请帮我点个赞,您的支持是我不竭的创作动力! 运行远程主机上的shell脚本 下面的例子是教给大家如何通过java程序,运行远程主机上的shell脚本。(我讲的不是一个黑客学习教程,而是使用用户名密码去执行有用户认证资格的主机上的shell脚本)。并且通过java程序获得shell脚本的输出。 首先通过maven坐标引入 JSch 依赖库,我们正是通过JSch去执行远程主机上的脚本。 <dependency> <groupId>com.jcraft</groupId> <artifactId>jsch</artifactId> <version>0.1.55</version> </dependency> 当然以下java代码可执行的的前提是,远程主机已经开通SSH服务(也就是我们平时登录主机所使用的服务)。 远程shell脚本 下面的代码放入一个文件: hello.sh ,脚本的内容很简单只是用来测试,回显输出“hello <参数1> ” #! /bin/sh echo "hello $1\n"; 然后我把它放到远程主机的 /root 目录下面,远程主机的IP是 1.1.1.1

不想得手指关节炎?帮你提炼IDEA常用代码补全操作

可紊 提交于 2020-08-12 20:17:40
一、常用的代码补全操作 1、.for和.fori(for 循环遍历) 输入 args.for 回车(args是一个数组或集合类),则会生成for循环遍历: 输入 args.fori 回车,则会生成带有索引的for循环遍历语句: 2、sout(控制台输出语句) 代码中输入 sout 回车,会自动生成 System.out.println() 这个控制台输出打印语句: 3、psvm 在代码中输入psvm之后回车 会自动生成main函数,psvm是 public static void main 的首字母: 4、.var(为对象生成声明部分代码) 输入“xxx”.var回车,则会生成如下代码: 输入123.var回车,则会生成如下代码: 输入new ArrayList().var回车,则会生成如下代码: 5、.if(生成 if 语句) 写好一个判断条件之后加上.if,回车: 生成如下的if语句: 6、.null 与 .nn(空、非空判断) 输入args.null回车,则会生成如下代码,判断是否为null: 输入args.nn回车,则会生成如下代码,判断是否不为null: 二、常用快捷键 Ctrl + O 查看我们继承的类或者接口中的方法,以及我们要实现的方法 Ctrl+Alt+T 将代码包在一个块中,例如try/catch ;synchronized等 作用 windows 快捷键

Spring Security 实战干货:图解用户是如何登录的

人走茶凉 提交于 2020-08-12 06:55:24
1. 前言 欢迎阅读Spring Security 实战干货系列文章,在集成 Spring Security 安全框架的时候我们最先处理的可能就是根据我们项目的实际需要来定制注册登录了,尤其是 Http 登录认证。根据以前的相关文章介绍, Http 登录认证由过滤器 UsernamePasswordAuthenticationFilter 进行处理。我们只有把这个过滤器搞清楚才能做一些定制化。今天我们就简单分析它的源码和工作流程。 2. UsernamePasswordAuthenticationFilter 源码分析 UsernamePasswordAuthenticationFilter 继承于 AbstractAuthenticationProcessingFilter (另文分析)。它的作用是拦截登录请求并获取账号和密码,然后把账号密码封装到认证凭据 UsernamePasswordAuthenticationToken 中,然后把凭据交给特定配置的 AuthenticationManager 去作认证。源码分析如下: public class UsernamePasswordAuthenticationFilter extends AbstractAuthenticationProcessingFilter { // 默认取账户名、密码的key public static

Spring Security 之 rememberMe 自动登录

て烟熏妆下的殇ゞ 提交于 2020-08-12 03:41:06
自动登录是将用户的登录信息保存在用户浏览器的cookie中,当用户下次访问时,自动实现校验并建立登录态的一种机制。 Spring Security提供了两种非常好的令牌: 散列算法加密用户必要的登录信息并生成令牌 数据库等持久性数据存储机制用的持久化令牌 散列加密方案 在Spring Security中加入自动登录的功能非常简单: @Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests() .antMatchers("/api/user/**").hasRole("user") //user 角色访问/api/user/开头的路由 .antMatchers("/api/admin/**").hasRole("admin") //admin 角色访问/api/admin/开头的路由 .antMatchers("/api/public/**").permitAll() //允许所有可以访问/api/public/开头的路由 .and() .formLogin() .and() .rememberMe().userDetailsService(userDetailsService()); //记住密码 } 重启服务后访问受限 API

SpringSecurity(1)---认证+授权代码实现

一个人想着一个人 提交于 2020-08-12 01:23:15
认证+授权代码实现 Spring Security是 一种基于 Spring AOP 和 Servlet 过滤器的安全框架 。它提供全面的安全性解决方案,同时在 Web 请求级和方法调用级处理身份确认和授权。 有关认证和授权的理论知识,之前有写过相关博客。 了解权限管理 一、SpringSceurity工作流程 网上找一张图,觉得画的挺好的,比较容易理解。不然换的是源码流程图很难去理解。 图片地址 : 地址 可以单机放大看更加清楚 要想理解这张图建议看下这篇博客,因为这张图中需要自定义的My...类,在文章中都有说明,所以更好理解点。 Spring Boot Security 详解 二、认证+授权代码 这里只展示一些核心代码,具体完整代码放在github上。 1、UserDetails接口 Security 中的用户接口,我们自定义用户类要实现该接口, 用于向security中注入当前用户的姓名密码,和拥有的角色 。同时也包含一些其它信息,比如当前用户是否过期, 账号是否锁定等等。 自己定义User实现这个接口 public class User implements UserDetails { private String username; private String password; private List<Role> roles; /** * 获取用户名 */

SpringBoot+Spring Security退出登录/自定义退出

放肆的年华 提交于 2020-08-11 20:45:50
本文在的 Spring Boot + Spring Security权限控制 基础上搭建退出登录 Spring Security默认的退出登录URL为/logout,退出登录后,Spring Security会做如下处理: 1.使当前的Sesion失效; 2.清除与当前用户关联的RememberMe记录; 3.清空当前的SecurityContext; 4.重定向到登录页。 自定义退出: 在Spring Security配置中添加自定义退出的url,推出成功后跳转到 /signout/success(切记需要将其加入到无需认证的列表中) @Component @EnableGlobalMethodSecurity(prePostEnabled = true) // 开启权限注解 public class MySecurityConfig extends WebSecurityConfigurerAdapter { @Autowired private MyAuthenticationFailureHandler authenticationFailureHandler; @Autowired private MyAuthenticationSuccessHandler authenticationSuccessHandler; @Autowired private

Spring Security 原理分析(一)

只愿长相守 提交于 2020-08-11 19:19:04
Spring Security 初始化 在普通的spring mvc 框架中,我们需要 @Configuration @EnableWebSecurity public class MyWebSecurityConfiguration extends WebSecurityConfigurerAdapter 手动添加 EnableWebSecurity 来启动 spring security,不过在Spring Boot中,我们不需要再写该注解。 因为,spring boot自动装配类 WebSecurityEnablerConfiguration 已经帮我们完成了该工作。 @Configuration( proxyBeanMethods = false ) @ConditionalOnBean({WebSecurityConfigurerAdapter.class}) @ConditionalOnMissingBean( name = {"springSecurityFilterChain"} ) @ConditionalOnWebApplication( type = Type.SERVLET ) @EnableWebSecurity public class WebSecurityEnablerConfiguration { public

有效提高java编程安全性的12条黄金法则

廉价感情. 提交于 2020-08-11 18:59:57
安全性是软件开发中最复杂,最广泛和最重要的考量之一。Java是具有许多内置安全性功能的开发平台,java在长期的发展过程中,已经经过了很多高强度的安全测试,并经常更新安全漏洞。并且Java生态系统还包括用于分析和报告安全性问题的各种工具。 但是,即使有了可靠的开发平台,也同样要保持警惕。应用程序开发是一项复杂的工作,漏洞会隐藏起来不易发现。程序员应该在应用程序开发的每个阶段都考虑安全性,从类级别的代码编程到API端点授权都应该被考虑在内。 以下为大家介绍的基本规则,可以为构建更安全的Java应用程序奠定良好的基础。供参考学习! Java安全规则1:编写简单而强大的Java代码 漏洞喜欢隐藏在复杂代码中,因此在不牺牲功能的情况下使代码尽可能简单。在代码中公开尽可能少的信息,隐藏实施细节,支持可维护和安全的代码。下面三个技巧将大大有助于编写安全的Java代码: 充分利用 Java的访问修饰符 。为类,方法及其属性声明访问级别,可以设为private的所有内容都应该为private。 避免过度使用反射和内省 。在某些情况下,应该使用这种高级技术,但是在大多数情况下,您应该避免使用它们。使用反射消除了强类型化,可能会给代码引入漏洞和不稳定性。将类名与字符串进行比较容易出错,并且很容易导致名称空间冲突。 始终定义尽可能小的API和接口 。解耦组件并使它们在尽可能小的区域内交互