基础的授权其实只有两行代码就不单独写一个篇章了;

这两行就是上一章demo的权限判断;

集成SpringBoot

SpringBoot介绍

这个篇章主要是讲SpringSecurity的,SpringBoot不做主要讲解

创建SpringBoot项目

在这里说一下,我的所有项目创建和代码的书写都是使用的IDEA,eclipse我用的不是很明白;

点击File -> new Project

我用的是Spring初始化

配置Maven信息后点击下一步

在这里我选择了Lombok.web,和security

一些路径的配置,

在POM.xml中我除了选择的又增加了Servlet的依赖

<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>3.0-alpha-1</version>
<scope>provided</scope>
</dependency>

springboot工程会在启动时自动扫描启动类所在包中的所有类及其子包子类加载到Spring容器中,所以不再需要SpringConfig.java的配置类

在工程中会有一个application.properties的配置文件,当然也可以换为yml的,我们公司统一使用yml的

在这个类里面配置就可以了

# 端口号
server.port=8080
# 上下文路径
server.servlet.context-path=/abc
# spring 应用程序名
spring.application.name=security

配置SpringWeb的配置类

 package com.dance.flower.springbootsecurity.config;

 import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; /**
* @Description web配置类
* @ClassName SpingWebConfig
* @Author mr.zhang
* @Date 2020/5/10 23:31
* @Version 1.0.0
**/
@Configuration
public class SpingWebConfig implements WebMvcConfigurer { @Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/").setViewName("redirect:/login");
}
}

视图解析器也不需要了,也配置在了application.properties中

# 视图前缀
spring.mvc.view.prefix=/WEB-INF/views/
# 视图后缀
spring.mvc.view.suffix=.jsp

springsecurity的配置是一样的,拷贝一下,把注解换为@Configuration

 package com.dance.flower.springbootsecurity.config;

 import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
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.crypto.password.NoOpPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.security.provisioning.InMemoryUserDetailsManager; /**
* @Description 安全配置
* @ClassName WebSecurityConfig
* @Author mr.zhang
* @Date 2020/5/6 17:58
* @Version 1.0.0
**/
@Configuration
public class WebSecurityConfig extends WebSecurityConfigurerAdapter { /**
* 定义用户信息服务(查询用户信息)
* @return UserDetailsService
*/
@Bean
@Override
public UserDetailsService userDetailsService(){
// 基于内存比对
InMemoryUserDetailsManager inMemoryUserDetailsManager = new InMemoryUserDetailsManager();
// 创建用户
inMemoryUserDetailsManager.createUser(User.withUsername("zs").password("zs").authorities("p1").build());
inMemoryUserDetailsManager.createUser(User.withUsername("ls").password("ls").authorities("p2").build());
return inMemoryUserDetailsManager;
} /**
* 密码编码器
* @return PasswordEncode
*/
@Bean
public PasswordEncoder passwordEncoder(){
// 暂时采用字符串比对
return NoOpPasswordEncoder.getInstance();
} /**
* 安全拦截机制
* @param http
* @throws Exception
*/
@Override
protected void configure(HttpSecurity http) throws Exception {
// 认证请求
http.authorizeRequests()
.antMatchers("/r/r1").hasAuthority("p1")
.antMatchers("/r/r2").hasAuthority("p2")
// 需要认证
.antMatchers("/r/**").authenticated()
// 其他的放行
.anyRequest().permitAll()
// 并且
.and()
// 允许表单登录
.formLogin()
// 成功后转发地址
.successForwardUrl("/success");
}
}

Controller直接拷贝

 package com.dance.flower.springbootsecurity.controller;

 import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; /**
* @Description 认证控制器
* @ClassName AuthService
* @Author mr.zhang
* @Date 2020/5/2 17:40
* @Version 1.0.0
**/
@RestController
public class AuthController { @RequestMapping(value = "/r/r1",produces = {"application/json;charset=UTF-8"})
public String r1(){
return "访问资源r1";
} @RequestMapping(value = "/r/r2",produces = {"application/json;charset=UTF-8"})
public String r2(){
return "访问资源r2";
} /**
* 成功后跳转 提供给SpringSecurity使用
* @return
*/
@RequestMapping(value="/success",produces = ("text/plain;charset=UTF-8"))
public String loginSuccess(){
return "登录成功";
} }

开始启动.....  运行Main方法

我就知道我的启动不会是一帆风顺的,好吧,报错了,检查之后发现,还是自己作的原因,为啥要在POM.xml中添加Servlet依赖呢,自己也很迷糊,注释掉了,重新启动成功

不用在意8080后的那个名字,本来是abc,在我排查错误的时候,以为是context-path和application.name不一致的问题,后来重试了一下,发现不是,,所以不用在意

用户名密码还是之前配置的么有变

洗洗睡了

作者:彼岸舞

时间:2020\05\10

内容关于:spring security

本文部分来源于网络,只做技术分享,一概不负任何责任

Spring security OAuth2.0认证授权学习第四天(SpringBoot集成)的更多相关文章

  1. Spring security OAuth2.0认证授权学习第一天(基础概念-认证授权会话)

    这段时间没有学习,可能是因为最近工作比较忙,每天回来都晚上11点多了,但是还是要学习的,进过和我的领导确认,在当前公司的技术架构方面,将持续使用Spring security,暂不做Shiro的考虑, ...

  2. Spring security OAuth2.0认证授权学习第三天(认证流程)

    本来之前打算把第三天写基于Session认证授权的,但是后来视屏看完后感觉意义不大,而且内容简单,就不单独写成文章了; 简单说一下吧,就是通过Servlet的SessionApi 通过实现拦截器的前置 ...

  3. Spring security OAuth2.0认证授权学习第二天(基础概念-授权的数据模型)

    如何进行授权即如何对用户访问资源进行控制,首先需要学习授权相关的数据模型. 授权可简单理解为Who对What(which)进行How操作,包括如下: Who,即主体(Subject),主体一般是指用户 ...

  4. Spring security OAuth2.0认证授权学习第二天(基础概念-RBAC)

    RBAC 基于角色的访问控制 基于角色的访问控制用代码实现一下其实就是一个if的问题if(如果有角色1){ } 如果某个角色可以访问某个功能,当某一天其他的另一个角色也可以访问了,那么代码就需要变化, ...

  5. Spring Security OAuth2.0认证授权二:搭建资源服务

    在上一篇文章[Spring Security OAuth2.0认证授权一:框架搭建和认证测试](https://www.cnblogs.com/kuangdaoyizhimei/p/14250374. ...

  6. Spring Security OAuth2.0认证授权三:使用JWT令牌

    Spring Security OAuth2.0系列文章: Spring Security OAuth2.0认证授权一:框架搭建和认证测试 Spring Security OAuth2.0认证授权二: ...

  7. Spring Security OAuth2.0认证授权四:分布式系统认证授权

    Spring Security OAuth2.0认证授权系列文章 Spring Security OAuth2.0认证授权一:框架搭建和认证测试 Spring Security OAuth2.0认证授 ...

  8. Spring Security OAuth2.0认证授权五:用户信息扩展到jwt

    历史文章 Spring Security OAuth2.0认证授权一:框架搭建和认证测试 Spring Security OAuth2.0认证授权二:搭建资源服务 Spring Security OA ...

  9. Spring Security OAuth2.0认证授权六:前后端分离下的登录授权

    历史文章 Spring Security OAuth2.0认证授权一:框架搭建和认证测试 Spring Security OAuth2.0认证授权二:搭建资源服务 Spring Security OA ...

随机推荐

  1. Python解决网吧收费系统,远控网吧电脑设备!

    python破解网吧收费系统,远控网吧电脑设备! 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手.很多已经做案例的人,却不知道如何去学习更 ...

  2. socket传输图片用shutdownoutput()之后无法继续传输数据

    socket传输图片用shutdownoutput()之后无法继续传输数据前言java的socket是一个全双工套接字,任何的输入流或输出流的close()都会造成Socket关闭.使用java服务器 ...

  3. 2020-07-11:session和cookie的区别是什么?

    福哥答案2020-07-11: 1.保存位置:session服务端.cookie客户端.2.安全性:session相对安全,cookie相对不安全.3.存储类型:session能够存储任意的对象,co ...

  4. web安全之python延时注入

    通过python代码编写的一个延时的sql注入脚本 首先我们导入了request请求库和string类型的库,通过库我们可以通过访问请求的方式访问url链接. url链接为注入链接地址这里我随便写的一 ...

  5. Es6扩展运算符--三点运算符(...)--展开语法(Spread syntax)

    0.看文档呀 关于拓展运算符更详细的解释见 > MDN展开语法 关于剩余参数更详细的解释见 >MDN剩余参数 关于解构赋值更详细的解释见 >MDN解构赋值 直接看上面的文档更好 1. ...

  6. SQL Server 异常代码处理

    SQL Server使用TRY...CATCH 结构实现TSQL语句的错误处理,TRY命令负责监控语句执行的情况,如果有TSQL语句发生异常,并且严重级别(Severity Level)大于10,并且 ...

  7. C#分布式登录——jwt

    一.传统的session登录 在服务器存储一份用户登录的信息,这份登录信息会在响应时传递给浏览器,告诉其保存为cookie,以便下次请求时发送给我们的应用,这样我们的应用就能识别请求来自哪个用户了,这 ...

  8. javascript 数组的组合

    javascript 数组的组合 一.前言 二.数组的组合 concat()方法 push(...items) 其他方法 三.结束语 一.前言 今天在开发项目过程中,遇到了一个需求,先请求了30个数据 ...

  9. JavaScript学习系列博客_33_JavaScript String对象

    String对象 在底层,字符串是以数组的形式保存的.比如说一个字符串"String"以["H","t","r",&qu ...

  10. 解决 supervisor : 无法加载文件 C:\Users\charles\AppData\Roaming\npm\supervisor.ps1

    在使用vsCode中运行cnpm install时报错. 解决方法 1.在win10 系统中搜索框 输入 Windows PowerShell,选择 管理员身份运行 2.使用,win+R打开了powe ...