日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

SpringBoot如何實現同域SSO(單點登錄)

瀏覽:180日期:2023-03-11 11:46:54
目錄如何實現同域SSO?代碼實現依賴配置控制器攔截器實現界面

單點登錄,其實看起來不是很復雜,只是細節上的處理,單點區分有三種

同域SSO 同父域SSO 跨域的SSO 如何實現同域SSO?

個人理解:當用戶登錄訪問demo1.lzmvlog.top時,同時具有訪問demo2.lzmvlog.top的能力,即認證完成一次,可以訪問所有系統。

實現方式:可以采用Cookie實現,即用戶在訪問一個系統時,攜帶認證頒發的信息,系統響應是否具有訪問資格,否則跳轉認證,也可以采用Session,即Session共享,校驗訪問用戶是否具有有效的信息,提供訪問資格

代碼實現依賴

<!--spring-data-jpa--><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId></dependency><!-- mysql --><dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId></dependency>配置

server: port: 8090spring: application: name: authority datasource: url: jdbc:mysql://127.0.0.1:3306/SSO?useUnicode=true&characterEncoding=utf8&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=GMT%2B8 username: root password: 123456 driver-class-name: com.mysql.cj.jdbc.Driver

當用戶訪問除登錄界面時,都需要提前認證,認證完成之后需要跳轉到之前訪問的路徑上,并提供訪問別的系統的權限。

實現邏輯,當用戶訪問任何路徑時,都需要通過攔截器的校驗,確認擁有訪問的權限,才能放行通過,不具有訪問權限的,重定向到 登錄界面,并保存原有訪問的頁面路徑,驗證成功的時候跳轉到原有頁面

控制器

@Controllerpublic class IndexController { @Autowired UserRepository userRepository; /** * 將要跳轉的路徑 */ public String url; /** * 登錄界面 * * @return */ @GetMapping('/index') public String index() {return 'index'; } /** * 登錄界面 * * @return */ @GetMapping('/') public String index1() {return 'index'; } /** * 登錄請求接口 * * @param username 賬號 * @param password 密碼 * @param response * @return */ @PostMapping('login') public String login(String username, String password, HttpServletResponse response) {// 用戶登錄boolean exists = userRepository.exists(Example.of(new User().setUsername(username).setPassword(password)));if (exists) { Cookie cookie = new Cookie('username', username); response.addCookie(cookie); // 如果正常訪問即跳轉到正常頁面 if (StringUtils.isEmpty(url)) {return 'demo1'; } // 如果之前存在訪問的頁面,認證完成即跳轉會原有的頁面 return url;}return 'index'; } /** * 跳轉到 demo2 * * @return */ @GetMapping('demo2') public String demo2() {return 'demo2'; } /** * 跳轉到 demo1 * * @return */ @GetMappi=ng('demo1') public String demo1() {return 'demo1'; }}攔截器實現

@Componentpublic class CookieHandlerInterceptor implements HandlerInterceptor { @Autowired UserRepository userRepository; @Autowired IndexController indexController; /** * 執行方法之前 * * @param request * @param response * @param handler * @return * @throws Exception */ @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {// 獲取當前請求得路徑 如果不是正常得登錄界面請求 登錄成功之后需要跳轉到原來請求得界面上String servletPath = request.getServletPath();// 對不需要攔截得路徑進行放行if ('/index'.equals(servletPath) || '/'.equals(servletPath) || '/login'.equals(servletPath)) { return true;}if (!'/index'.equals(servletPath) || !'/'.equals(servletPath)) { indexController.url = servletPath;}Cookie[] cookies = request.getCookies();boolean exists = false;if (cookies != null) { for (Cookie cookie : cookies) {String value = cookie.getValue();if (!StringUtils.isEmpty(value)) { exists = userRepository.exists(Example.of(new User() .setUsername(value)));} }}if (exists) { return true;} else { response.sendRedirect('/index');}return false; }}

在SpringBoot2.x之后不能生效,需要將攔截器添加到攔截器鏈路中,即:

@Configurationpublic class WebMvcConfig extends WebMvcConfigurationSupport { /** * Session 攔截處理器 */ @Autowired private CookieHandlerInterceptor cookieHandlerInterceptor; /** * 添加攔截器 * * @param registry */ @Override protected void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(this.cookieHandlerInterceptor).addPathPatterns('/**');super.addInterceptors(registry); }}

其實攔截器還有第二種實現方式,即通過Filter接口實現

@Componentpublic class CookieFilter extends OncePerRequestFilter { @Autowired UserRepository userRepository; @Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {// 獲取當前請求得路徑 如果不是正常得登錄界面請求 登錄成功之后需要跳轉到原來請求得界面上String servletPath = request.getServletPath();IndexController indexController = new IndexController();// 對不需要攔截得路徑進行放行if ('/index'.equals(servletPath) || '/'.equals(servletPath) || '/login'.equals(servletPath)) { filterChain.doFilter(request, response);}if (!'/index'.equals(servletPath) || !'/'.equals(servletPath)) { indexController.url = servletPath;}Cookie[] cookies = request.getCookies();boolean exists = false;if (cookies != null) { for (Cookie cookie : cookies) {String value = cookie.getValue();if (!StringUtils.isEmpty(value)) { exists = userRepository.exists(Example.of(new User() .setUsername(value)));} }}if (exists) { filterChain.doFilter(request, response);} else { response.sendRedirect('/');} }}

其實也可以采用Session的方式實現,采用共享Session的方式,我這里只是簡單的實現一下,其實在認證時可以結合SpringSecurity或者Shiro安全框架去整合JWT以保證信息的安全

界面

index.html

<!DOCTYPE html><html><head> <meta charset='UTF-8'> <title>登錄</title></head><body><div align='center'> <h1>請登錄</h1> <form action='/login' method='post'><span>賬號:</span><input name='username' type='text' value='zhang'><br><span>密碼:</span><input name='password' type='password' value='123456'><br><button type='submit' style='margin: 10px 0'>登錄</button> </form></div></body></html>

demo1.html和demo2.html只需要坐一下簡單的區分,知道是哪個頁面就行了

同域SSO其實不是很復雜,只是了解一下整個訪問的過程,和需要做的一些限制即可,后續看看做后面兩種的實現

即同父域SSO和跨域SSO

以上就是SpringBoot如何實現同域SSO(單點登錄)的詳細內容,更多關于SpringBoot 實現同域SSO的資料請關注好吧啦網其它相關文章!

標簽: Spring
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日韩欧美网址| 国产精品毛片一区二区在线看| 欧美日韩视频网站| 国产aⅴ精品一区二区四区| 成人精品国产亚洲| 精品日本视频| 日韩大片在线播放| 欧美日韩免费观看一区=区三区| 在线精品小视频| 欧美专区在线| 18国产精品| 精品免费av| 日韩免费看片| 亚洲一区二区免费看| 日韩精品a在线观看91| 国产精品天天看天天狠| 国产精品精品国产一区二区| 久久精品国产68国产精品亚洲| 免费av一区| 日韩精品欧美大片| 久久av免费| 久久久久美女| 亚洲日产国产精品| 久久不卡国产精品一区二区| 精品久久美女| 91精品亚洲| 婷婷综合一区| 久久99久久久精品欧美| 日韩一区电影| 日韩精品一二区| 国产精品成人自拍| 国产麻豆久久| 伊人久久亚洲| 精品日本视频| 日韩视频一区二区三区在线播放免费观看 | 在线成人直播| 亚洲青青久久| 成午夜精品一区二区三区软件| 免费欧美一区| 国产日韩欧美一区二区三区| 亚洲成av在线| 婷婷综合一区| 国产精品久久久久久久免费观看| 尤物网精品视频| 国产精品一线天粉嫩av| 欧洲亚洲一区二区三区| 亚洲精品激情| 欧美男人天堂| 亚洲精品乱码久久久久久蜜桃麻豆 | 亚洲日本网址| 一区二区电影| 国产精品精品| 亚洲久久视频| 日韩亚洲一区在线| 日韩国产91| 欧美/亚洲一区| 国产日产精品_国产精品毛片| 热三久草你在线| 日本一区免费网站| 久久九九国产| 国产精品第一国产精品| 国产精品老牛| 麻豆mv在线观看| 色狠狠一区二区三区| 久久久一本精品| 国产欧美丝祙| 老色鬼久久亚洲一区二区| 国产精品久久久久久久久妇女| 亚洲色图国产| 欧美手机在线| 高清久久一区| 久久国产欧美日韩精品| 99热精品在线观看| 成人在线视频区| 日本不卡高清视频| 黄色日韩精品| 欧美sss在线视频| 精品国内亚洲2022精品成人| 日韩视频1区| 久久国产高清| 女人av一区| 国产66精品| 国产午夜精品一区在线观看| 亚洲激情黄色| 欧美aa在线观看| 国产精品久久久久久久久久白浆| 久热re这里精品视频在线6| 久久精品导航| 国产精品国产三级国产在线观看| 亚洲精品乱码久久久久久蜜桃麻豆| 香蕉精品久久| 日韩精品中文字幕第1页| 欧美日本不卡高清| 免费的成人av| 亚洲中午字幕| 午夜宅男久久久| 欧美亚洲激情| 日韩中文字幕高清在线观看| 开心激情综合| 久久不见久久见中文字幕免费| 日本视频一区二区| 亚洲欧洲国产精品一区| 亚洲一区国产一区| 午夜精品影院| 亚洲性色av| 热三久草你在线| 在线中文字幕播放| 国产一区国产二区国产三区| 久久av免费看| 麻豆精品少妇| 精品网站999| 精品国产一区二区三区噜噜噜| 国产欧美三级| 国产精品一区二区三区av| 欧美视频精品全部免费观看| 日本不卡一区二区三区| 亚洲+小说+欧美+激情+另类| 亚洲精品黄色| 日韩高清不卡一区二区| 在线国产精品一区| 日韩有吗在线观看| 中文不卡在线| 亚洲精品福利| 91精品国产自产精品男人的天堂| 日本欧美一区二区在线观看| 97精品久久| 国产极品一区| 麻豆理论在线观看| 亚洲午夜91| 久久高清免费观看| 日韩1区2区日韩1区2区| 国产欧美啪啪| 久久精品女人| 新版的欧美在线视频| 欧美一区久久久| 久久久国产精品一区二区中文| 久久国产中文字幕| 一区在线免费观看| 亚洲精品在线国产| 国产激情久久| 日韩欧美国产精品综合嫩v| 欧美日韩国产一区二区三区不卡| 午夜在线视频观看日韩17c| 日本中文字幕一区二区视频| 国产精品久久国产愉拍| 97精品国产一区二区三区| 久久久久久久久99精品大| 天堂网在线观看国产精品| 首页欧美精品中文字幕| 中文无码日韩欧| 久久av资源| 丝袜av一区| 在线精品国产亚洲| 国产精品亚洲综合色区韩国| av高清不卡| 蜜臀91精品一区二区三区| 国产九一精品| 久久精品中文| 日韩精品成人在线观看| 国产成人77亚洲精品www| 五月综合激情| 国产伦理一区| 欧美91视频| 日本欧美久久久久免费播放网| 精品国产亚洲一区二区三区在线| 国产高清久久| 国产精品毛片久久久| 亚洲一级网站| 日韩欧美久久| 色偷偷色偷偷色偷偷在线视频| 美女精品网站| 狠狠久久伊人中文字幕| 制服诱惑一区二区| 精品一区二区三区的国产在线观看 | 另类综合日韩欧美亚洲| 日韩成人高清| 亚洲精品在线a| 成人综合一区| 亚洲麻豆一区| 在线手机中文字幕| 亚洲不卡视频| 久久中文字幕二区| 日本欧美一区二区在线观看| 99精品视频在线观看免费播放| 亚洲精品自拍| 99精品美女| 麻豆国产欧美一区二区三区 | 国产精品呻吟| 麻豆精品在线播放| 美女久久一区| 高清av一区| 婷婷成人av| 国精品一区二区| 国产精品嫩模av在线| 好看的av在线不卡观看| 精品视频高潮| 婷婷精品久久久久久久久久不卡| 日韩三区在线| 麻豆国产精品| 日韩精品福利一区二区三区|