官网
安装
新建SpringBoot项目
此处不做详细介绍。
使用kisso
gradle添加依赖:
implementation("com.baomidou:kisso:3.8.1")
登录接口将 token
作为 Cookie
:
@PostMapping("do-login")
public boolean doLogin(String username, String password, HttpServletRequest request, HttpServletResponse response) {
log.info("username is: {} and password is: {}", username, password);
if (StringUtils.isBlank(username) || StringUtils.isBlank(password)) {
throw new NullPointerException();
}
// 下面这两行代码是重点
SSOToken token = SSOToken.create().setId(0).setIssuer(username).setOrigin(TokenOrigin.COOKIE).setUserAgent(request);
SSOHelper.setCookie(request, response, token);
return true;
}
添加后,请求登录接口观察 Chrome DevTools
可以发现, Response Header
中出现了 Set-Cookie
:
在 Application
的 Cookies
中也可以看到:
拦截请求
上面使用了 kisso 生成了 token 并设置 cookie,我们需要判断这个 token 是否合法,所以用到了 kisso 自带的拦截器 SSOSpringInterceptor,在配置类中增加拦截:
package com.example.kissodemo.config;
import com.baomidou.kisso.web.interceptor.SSOSpringInterceptor;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
/**
* @author zhaokai
* @since 2022-06-17
*/
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
SSOSpringInterceptor ssoSpringInterceptor = new SSOSpringInterceptor();
registry.addInterceptor(ssoSpringInterceptor).addPathPatterns("/**");
}
}
如果想要在登录失败时,自定义某些逻辑,可以自己实现 SSOHandlerInterceptor
接口:
package com.example.kissodemo.config;
import com.baomidou.kisso.web.handler.SSOHandlerInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* @author zhaokai
* @since 2022-06-17
*/
public class MySSOHandlerInterceptor implements SSOHandlerInterceptor {
@Override
public boolean preTokenIsNullAjax(HttpServletRequest request, HttpServletResponse response) {
// 做一些其他的处理
return false;
}
@Override
public boolean preTokenIsNull(HttpServletRequest request, HttpServletResponse response) {
// 做一些其他的处理
return false;
}
}
然后在配置类中添加这个实现类就可以了:
最后
到此,一个非常简单的 kisso 使用的 demo 就完成了,其实 kisso 的功能远不止于此,后面文章中会总结一下更深层次的功能。