Spring security OAuth2.0认证授权学习第四天(SpringBoot集成)

时间:2023-03-09 03:24:16
Spring security OAuth2.0认证授权学习第四天(SpringBoot集成)

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

Spring security OAuth2.0认证授权学习第四天(SpringBoot集成)

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

集成SpringBoot

SpringBoot介绍

Spring security OAuth2.0认证授权学习第四天(SpringBoot集成)

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

创建SpringBoot项目

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

点击File -> new Project

Spring security OAuth2.0认证授权学习第四天(SpringBoot集成)

我用的是Spring初始化

Spring security OAuth2.0认证授权学习第四天(SpringBoot集成)

配置Maven信息后点击下一步

Spring security OAuth2.0认证授权学习第四天(SpringBoot集成)

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

Spring security OAuth2.0认证授权学习第四天(SpringBoot集成)

一些路径的配置,

在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依赖呢,自己也很迷糊,注释掉了,重新启动成功

Spring security OAuth2.0认证授权学习第四天(SpringBoot集成)

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

Spring security OAuth2.0认证授权学习第四天(SpringBoot集成)

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

洗洗睡了

作者:彼岸舞

时间:2020\05\10

内容关于:spring security

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