文档章节

崛起于Springboot2.X + 300秒解决单点登陆(53)

木九天
 木九天
发布于 10/21 21:24
字数 651
阅读 138
收藏 4

《SpringBoot2.X心法总纲》

1、pom文件依赖

<dependency>
    <groupId>com.majiaxueyuan</groupId>
    <artifactId>sso-core</artifactId>
    <version>1.2.2</version>
</dependency>

2、sso配置文件

    由于使用的是springboot2.2.0版本,所以配置需要实现WebMvcConfigurer

import com.majiaxueyuan.sso.core.filter.MaJiaSSOIntercepter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

/**
 * @Author:MuJiuTian
 * @Description: 单点登陆配置WebMvcConfigurer
 * @Date: Created in 下午5:34 2019/10/21
 */
@Configuration
public class SsoConfig implements WebMvcConfigurer {

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(ssoIntercepter()).addPathPatterns("/**");
    }

    @Bean
    public MaJiaSSOIntercepter ssoIntercepter() {
        return new MaJiaSSOIntercepter().setTokenSalt("pwd_salt");
    }
}

    如果是其他版本可以使用集成WebMvcConfigurerAdapter

import com.majiaxueyuan.sso.core.filter.MaJiaSSOIntercepter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

/**
 * @Author:MuJiuTian
 * @Description: 单点登陆配置WebMvcConfigurerAdapter
 * @Date: Created in 下午5:34 2019/10/21
 */
@Configuration
public class SsoConfig extends WebMvcConfigurerAdapter {

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(ssoIntercepter()).addPathPatterns("/**");
    }

    @Bean
    public MaJiaSSOIntercepter ssoIntercepter() {
        return new MaJiaSSOIntercepter().setTokenSalt("pwd_salt");
    }
}

3、实体类

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
    private int userId;
    private String slat;
    private String account;
    // ....其他的字段就不写了
}

4、service逻辑层

/**
 * @Author:MuJiuTian
 * @Description: 简单测试,我就不写接口了,直接以class的形式
 * @Date: Created in 下午5:47 2019/10/21
 */
@Service
public class LoginService {

    public User checkUser(String account, String pwd){
        // 做假数据,加入密码登陆成功,返回user实体类
        return new User(1,account,"ewdsbj");
    }
}

5、controller层

import com.majiaxueyuan.sso.core.annotation.NoToken;
import com.majiaxueyuan.sso.core.constans.Result;
import com.majiaxueyuan.sso.core.helper.TokenLoginHelper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @Author:MuJiuTian
 * @Description: 测试单点登录框架
 * @Date: Created in 下午5:25 2019/10/21
 */
@RestController
public class LoginController {

    @Autowired
    LoginService loginService;

    @GetMapping(value = "/testToken")
    public String testToken() {
        return "需要token";
    }

    @GetMapping(value = "/login")
    @NoToken(notNeedToken = true)
    public String login(String account, String password) {

        // 测试用户输入的用户名、密码是否正确
        User user = loginService.checkUser(account, password);
        if (user == null){
            return "密码错误";
        }

        // 如果密码成功后,获取用户主键id、以及注册时的salt
        Long user_id = Long.valueOf(user.getUserId());
        String salt  = user.getSlat();

        // 然后通过sso-core框架获取token
        Result loginSuccess = TokenLoginHelper.loginSuccess(user_id,account,"",salt);

        // 获取token
        String token = "";
        if (loginSuccess.getCode() == 200){
            token = loginSuccess.getData().toString();
        }
        return token;
    }
}

6、测试

测试接口1:

测试接口2:

7、获取request用户对象

      用户获取到Token之后,返回给前端,前端携带时需要将Token添加到Header中的Authorization字段。当前强制使用此请求头字段,这些数据存储headers中带过来检测token是否过期或者登陆...情况。

SSOUser user = (SSOUser) request.getAttribute("ssoUser");

8、@NoToken

      当有某个请求不需要认证即可访问时,在此请求方法上添加注解@NoToken,不加注解需要验证,只要加上注解就表示不需要认证,不管@NoToken(notNeedToken = true)还是@NoToken(notNeedToken = false),都不需要验证,至少在目前最新1.2.2版本是这样。

9、介绍

sso-core单点登陆框架网址

© 著作权归作者所有

木九天

木九天

粉丝 215
博文 249
码字总数 190299
作品 0
海淀
程序员
私信 提问
崛起于Springboot2.X + 300秒搭建redis集群(17)

《SpringBoot2.X心法总纲》 1、添加配置 spring.redis.jedis.pool.max-active=8spring.redis.jedis.pool.max-wait=-1msspring.redis.jedis.pool.min-idle=0spring.redis.jedis.pool.max-idl......

木九天
2018/07/18
2.6K
0
崛起于Springboot2.X + session共享(50)

《SpringBoot2.X心法总纲》 简介:session共享是不同项目共享一个资源,譬如单点登录。 1、pom依赖 <dependency> </dependency> <dependency> </dependency> 2、application.properties 默认......

木九天
09/04
117
0
崛起于Springboot2.X + Mail邮件场景(57)

《SpringBoot2.X心法总纲》 场景:用户角度就是授权登陆注册等...开发角度就是线上的项目发现bug异常,立即给开发发送bug到邮箱,快速发现问题解决问题。 1、pom依赖 <dependency> </depende...

木九天
前天
46
0
崛起于Springboot2.X + Shiro融会贯通(54)

《SpringBoot2.X心法总纲》 目前Springboot搭配的各种后台管理系统基本都有shiro,下面的代码都是全的,如果麻烦,可以直接git下载也可以:https://gitee.com/mdxl/shiro.git 下面几个步骤都...

木九天
11/05
184
5
崛起于Springboot2.X + 100秒jar部署(19)

《SpringBoot2.X心法总纲》 序言:和打包war方式不同,如果你看过我上一篇:SpringBoot2.X打包war,jar会更简单。 1、pom.xml确定是jar <packaging>jar</packaging> 2、IDEA右侧,点击Maven...

木九天
2018/07/18
519
0

没有更多内容

加载失败,请刷新页面

加载更多

Android: Camera1 open、preview、take picture流程分析

一、Camera 架构 NOTE:这是 Android Camera API 1 ,Camera 的架构与 Android 整体架构是保持一致的:Framework : Camera.javaAndroid Runtime : android_hardware_Camera.cppLibrar...

天王盖地虎626
28分钟前
6
0
Spring Boot Actuator监控使用详解

在企业级应用中,学习了如何进行SpringBoot应用的功能开发,以及如何写单元测试、集成测试等还是不够的。在实际的软件开发中还需要:应用程序的监控和管理。SpringBoot的Actuator模块实现了应...

程序新视界
55分钟前
6
0
JDBC+C3P0+DBCP 基本使用

1.概述 这篇文章主要说了JDBC的基本使用,包括Statement,PreparedStatement,JDBC的连接,Mysql创建用户创建数据表,C3P0的连接与配置,DBCP的连接与配置. 2.mysql的处理 这里的JDBC使用Mysql作为...

Blueeeeeee
今天
8
0
MVC Linux下开发及部署

linux使用的是 Ubuntu 64 位 18.04.2 LTS 首先复制C:\Program Files (x86)\Embarcadero\Studio\20.0\PAServer 下 LinuxPAServer20.0.tar.gz 到 linux 目录下 运行链接编译程序 delphi环境配置......

苏兴迎
今天
11
0
3.控件及其属性

1.文本 2.按钮

横着走的螃蟹
今天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部