成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

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

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

瀏覽:150日期: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
相關文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
欧美视频精品在线观看| 国产视频久久| 亚洲国产精品一区| 欧美精品免费视频| 视频一区在线播放| 日韩视频久久| 亚洲色图第一区| 欧美日韩 国产精品| 欧美一区二区三区四区在线观看| 亚洲成人tv网| 99视频国产精品免费观看| 国产精品欧美一区喷水| 91网站视频在线观看| 337p亚洲精品色噜噜狠狠| 蜜臀久久久99精品久久久久久| 国产毛片久久| 一区二区三区在线视频观看 | 成人av午夜影院| 91精品欧美综合在线观看最新| 精品夜夜嗨av一区二区三区| 欧美三区在线观看| 经典三级在线一区| 欧美日韩国产电影| 精品一区二区三区在线播放视频| 91久久精品国产91性色tv| 亚洲成人av一区二区| 99国产精品久久久久久久成人热| 国产精品久久久久精k8| 欧美激情麻豆| 久久久久成人黄色影片| 国产成人啪午夜精品网站男同| 欧美日韩中文另类| 久久99精品久久久久久国产越南| 欧美日韩在线不卡| 国产欧美一区二区三区网站| 女人香蕉久久**毛片精品| 国产亚洲欧美在线| 国产精品多人| 亚洲欧洲日本在线| 国产精品免费一区二区三区在线观看| 亚洲精品老司机| 久久精品1区| 日本免费在线视频不卡一不卡二| 在线观看日韩国产| 国产呦精品一区二区三区网站| 欧美日韩激情一区二区| 精品在线一区二区| 欧美一区二区在线播放| 99久久综合狠狠综合久久| 久久精品欧美一区二区三区不卡 | 久久久国产精品一区二区三区| 五月婷婷欧美视频| 欧美午夜精品久久久久久超碰| 国产精品一区二区三区99| 久久久久久99久久久精品网站| 欧美日韩一区二区三区在线观看免| 欧美亚洲图片小说| 风流少妇一区二区| 国产欧美一区二区三区鸳鸯浴 | 亚洲一区精彩视频| 日韩电影在线一区二区| 欧美精品粉嫩高潮一区二区| 成人性生交大片免费看中文| 国产欧美日韩麻豆91| 亚洲日本免费| 免费在线观看不卡| 91精品欧美一区二区三区综合在| 91浏览器打开| 一区二区在线看| 欧洲一区二区av| 国产精品白丝jk白祙喷水网站| 精品国产成人在线影院| 欧美日韩日本网| 亚洲午夜久久久| 欧美日韩国产综合久久| 成人av网址在线观看| 国产精品美女久久久久久久久| 亚洲深爱激情| 奇米精品一区二区三区在线观看| 在线播放国产精品二区一二区四区 | 国内精品久久久久国产盗摄免费观看完整版| 18成人在线观看| 老妇喷水一区二区三区| 成人一区二区在线观看| 成人免费在线观看入口| 色哟哟欧美精品| 成人黄色网址在线观看| 国产精品全国免费观看高清 | 亚洲电影一区二区| 91精品国产入口| 亚洲视频一区| 久久国产视频网| 国产欧美一区二区三区沐欲| 国产精品日韩欧美一区| 韩国三级在线一区| 国产精品拍天天在线| 日本久久电影网| 97se亚洲国产综合自在线| 亚洲一区二区欧美日韩| 欧美一卡二卡在线| av成人国产| 国产精品99久久久久久久vr| 亚洲色图都市小说| 欧美人伦禁忌dvd放荡欲情| 欧美日本中文| 开心九九激情九九欧美日韩精美视频电影| 精品成人在线观看| 国产精品日韩欧美一区二区| 国产福利91精品| 亚洲免费伊人电影| 日韩一区二区在线观看视频播放| 国产亚洲在线| 不卡电影免费在线播放一区| 亚洲中国最大av网站| 精品99999| 久久精品女人的天堂av| 色综合婷婷久久| 麻豆国产欧美日韩综合精品二区 | 色婷婷亚洲精品| 亚洲欧美一级二级三级| 男男gaygay亚洲| 国产拍欧美日韩视频二区| 鲁大师影院一区二区三区| 99国产精品国产精品久久| 日本不卡一二三| 日韩一区中文字幕| 精品欧美一区二区久久| 在线中文字幕一区| 亚洲日本欧美| 欧美一区二区三区四区在线观看地址| 久久66热re国产| 亚洲v精品v日韩v欧美v专区| 亚洲国产精品99久久久久久久久 | 日韩精品成人一区二区三区| 欧美国产日本韩| 在线电影一区二区三区| 久久国产精品高清| 国产精品黄色| 成人精品免费看| 美女网站一区二区| 亚洲精品视频在线观看网站| 337p日本欧洲亚洲大胆精品 | 欧美日韩中字一区| 鲁鲁狠狠狠7777一区二区| 亚洲先锋成人| 99re这里只有精品视频首页| 裸体在线国模精品偷拍| 亚洲情趣在线观看| 久久久www成人免费毛片麻豆| 欧美日韩午夜精品| 免费久久久一本精品久久区| 亚洲婷婷在线| 99九九99九九九视频精品| 国产精品亚洲午夜一区二区三区| 日日摸夜夜添夜夜添精品视频 | www国产精品av| 色成人在线视频| 国产一级久久| 亚洲国产国产亚洲一二三| 欧美不卡一区| 9久草视频在线视频精品| 国产一区二区在线观看视频| 五月天网站亚洲| 一区二区三区在线免费观看| 国产精品免费免费| 国产香蕉久久精品综合网| 日韩一区二区精品在线观看| 欧美日韩精品二区第二页| 在线观看成人小视频| 久久综合九色| 久久精品女人| 亚洲一区二区伦理| 国产日韩精品久久| 亚洲开发第一视频在线播放| 欧美日韩一区二| 欧美国产另类| 欧美日韩无遮挡| 欧美大片专区| 欧美一区激情视频在线观看| av电影一区二区| 99视频一区二区| 91网站最新地址| 欧美日韩在线大尺度| 欧美日韩国产欧| 欧美日韩无遮挡| 韩国一区二区三区在线观看| 午夜精品短视频| 欧美日韩国产综合在线| 95精品视频在线| 91免费版在线| 欧美日韩伊人| 亚洲黄色免费| 国产伦精品一区二区三区| 久久精品日产第一区二区| 色天使久久综合网天天| 欧美亚洲一区二区三区四区| 欧美日韩在线播放一区| 欧美一区二区不卡视频| 欧美成人精品高清在线播放| 久久久久久久综合狠狠综合|