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

这两行就是上一章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. JS 留言板案例

    css代码 ul { list-style: none; } ul li { background-color: pink; line-height: 40px; margin: 10px; widt ...

  2. Devops 原始思想 所要实现的目标

    解释: DevOps(Development和Operations的组合词)是一组过程.方法与系统的统称,用于促进开发(应用程序/软件工程).技术运营和质量保障(QA)部门之间的沟通.协作与整合. 它 ...

  3. Vue组件通信之父传子

    一般情况下,子组件中无法直接使用父组件的变量.借助子组件的props选项可以实现这一点. 这里我将一个vue实例作为一个父组件: const app = new Vue({ el:'#div1', d ...

  4. C# ASP JS引用路径不正确导致的错误

    假设JS包放在根目录下的Scripts文件夹下 当前页的路径在另一个文件夹下,那么他引用JS应该:<script src="../Scripts/jquery-1.4.1.min.js ...

  5. NOIP真题索引

    NOIP真题索引 NOIP2019 Day 1 格雷码 括号树 树上的数 Day 2 Emiya 家今天的饭 划分 树的重心 NOIP2018 Day 1 铺设道路 货币系统 赛道修建 Day 2 旅 ...

  6. VMware Workstation 15 Pro安装带图形化界面的CentOS7

    1.双击打开“VMware Workstation”,然后选择“创建新的虚拟机” 2.在安装向导中,选择“稍后安装操作系统”,然后点击“下一步”继续安装 3.在“客户机操作系统”中选择“Linux(L ...

  7. React 17 要来了,非常特别的一版

    写在前面 React 最近发布了v17.0.0-rc.0,距上一个大版本v16.0(发布于 2017/9/27)已经过去近 3 年了 与新特性云集的 React 16及先前的大版本相比,React 1 ...

  8. 基于官方Drone-CI 的alpine版本asia亚洲时区构建支持. Drone-CI based alpine Timezone Build

    基于官方Drone-CI 的alpine版本最简化添加亚洲时区Dockerfile构建支持. iotd@Github: drone-ci-based-alpine-timezone-build 如添加 ...

  9. IA-32/centos7开机流程

    开机后系统首先在实地址模式下工作(只有1MB的寻址空间) 开机过程中,需要先准备在实模式下的中断向量表和中断服务程序.通常,由固化在主板上一块ROM芯片中的BIOS程序完成 加载BIOS的硬件信息,B ...

  10. Advances and Open Problems in Federated Learning

    挖个大坑,等有空了再回来填.心心念念的大综述呀(吐血三升)! 郑重声明:原文参见标题,如有侵权,请联系作者,将会撤销发布! 项目地址:https://github.com/open-intellige ...