一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - spring + shiro + cas 實現sso單點登錄的示例代碼

spring + shiro + cas 實現sso單點登錄的示例代碼

2021-01-07 13:52coderhuang Java教程

本篇文章主要介紹了spring + shiro + cas 實現sso單點登錄的示例代碼,具有一定的參考價值,有興趣的可以了解一下

sso-shiro-cas

spring下使用shiro+cas配置單點登錄,多個系統之間的訪問,每次只需要登錄一次,項目源碼

系統模塊說明

1.cas: 單點登錄模塊,這里直接拿的是cas的項目改了點樣式而已
2.doc: 文檔目錄,里面有數據庫生成語句,采用的是MySQL5.0,數據庫名為db_test
3.spring-node-1: 應用1
4.spring-node-2: 應用2

其中node1跟node2都是采用spring + springMVC + mybatis 框架,使用maven做項目管理

cas集成說明

1.首先采用的是查數據庫的方式來校驗用戶身份的,在cas/WEB-INF/deployerConfigContext.xml中第135行構建了這個類型

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<!-- 設置密碼的加密方式,這里使用的是MD5加密 -->
  <bean id="passwordEncoder"
   class="org.jasig.cas.authentication.handler.DefaultPasswordEncoder"
   c:encodingAlgorithm="MD5"
   p:characterEncoding="UTF-8" />
 
 <!-- 通過數據庫驗證身份,這個得自己去實現 -->
  <bean id="primaryAuthenticationHandler"
   class="com.distinct.cas.jdbc.QueryDatabaseAuthenticationHandler"
   p:dataSource-ref="dataSource"
   p:passwordEncoder-ref="passwordEncoder"
   p:sql="select password from t_user where account=? and status = 'active'" />
   
 <!-- 設置數據源 -->
   <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
     <property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
     <property name="url" value="jdbc:mysql://127.0.0.1:3306/db_test?useUnicode=true&amp;characterEncoding=utf8"></property>
     <property name="username" value="root"></property>
     <property name="password" value="123456"></property>
 </bean>

其中QueryDatabaseAuthenticationHandler這個類是自定義構建的,在cas/WEB-INF/lib/cas-jdbc-1.0.0.jar里面,有興趣的同學可以發編譯看下,關于幾個屬性的說明

1.dataSource: 數據源,配置MySQL的連接信息
2.passwordEncoder: 加密方式,這里用的是MD5
3.sql: sql查詢語句,這個語句就是根據用戶輸入的賬號查詢其密碼

以上就是單點登錄管理的主要配置

應用系統的配置node1

1.應用系統采用shiro做權限控制,并且跟cas集成

2.在/spring-node-1/src/main/resources/conf/shiro.properties 文件中

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
``` properties
shiro.loginUrl=http://127.0.0.1:8080/cas/login?service=http://127.0.0.1:8081/node1/shiro-cas
 
shiro.logoutUrl=http://127.0.0.1:8080/cas/logout?service=http://127.0.0.1:8081/node1/shiro-cas
 
shiro.cas.serverUrlPrefix=http://127.0.0.1:8080/cas
 
shiro.cas.service=http://127.0.0.1:8081/node1/shiro-cas
 
shiro.failureUrl=/users/loginSuccess
 
shiro.successUrl=/users/loginSuccess
 
```

其中shiro.loginUrl 跟 shiro.logoutUrl的前面是cas驗證的地址,后面的是我們應用系統的地址,這樣配置的方式是為了在訪問我們的應用系統的時候,先到cas進行驗證,如果驗證成功了,cas將重定向到shiro.successUrl 所表示的地址

3.在/spring-node-1/src/main/resources/conf/shiro.xml 文件中

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
<!-- Shiro Filter -->
  <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
    <property name="securityManager" ref="securityManager" />
    <!-- 設定用戶的登錄鏈接,這里為cas登錄頁面的鏈接地址可配置回調地址 -->
    <property name="loginUrl" value="${shiro.loginUrl}" />
    <property name="filters">
      <map>
        <!-- 添加casFilter到shiroFilter -->
        <entry key="casFilter" value-ref="casFilter" />
        <entry key="logoutFilter" value-ref="logoutFilter" />
      </map>
    </property>
    <property name="filterChainDefinitions">
      <value>
        /shiro-cas = casFilter
        /logout = logoutFilter
        /users/** = user
      </value>
    </property>
  </bean>
 
  <bean id="casFilter" class="org.apache.shiro.cas.CasFilter">
    <!-- 配置驗證錯誤時的失敗頁面 -->
    <property name="failureUrl" value="${shiro.failureUrl}" />
    <property name="successUrl" value="${shiro.successUrl}" />
  </bean>
 
  <bean id="logoutFilter" class="org.apache.shiro.web.filter.authc.LogoutFilter">
    <!-- 配置驗證錯誤時的失敗頁面 -->
    <property name="redirectUrl" value="${shiro.logoutUrl}" />
  </bean>
 
  <bean id="casRealm" class="com.spring.mybatis.realm.UserRealm">
    <!-- 認證通過后的默認角色 -->
    <property name="defaultRoles" value="ROLE_USER" />
    <!-- cas服務端地址前綴 -->
    <property name="casServerUrlPrefix" value="${shiro.cas.serverUrlPrefix}" />
    <!-- 應用服務地址,用來接收cas服務端票據 -->
    <property name="casService" value="${shiro.cas.service}" />
  </bean>
 
  <!-- Shiro's main business-tier object for web-enabled applications -->
  <bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
    <property name="subjectFactory" ref="casSubjectFactory"></property>
    <property name="realm" ref="casRealm" />
  </bean>
 
  <bean id="casSubjectFactory" class="org.apache.shiro.cas.CasSubjectFactory"></bean>
 
  <bean
    class="org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor">
    <property name="securityManager" ref="securityManager" />
  </bean>
 
  <bean id="lifecycleBeanPostProcessor" class="org.apache.shiro.spring.LifecycleBeanPostProcessor"></bean>
  <bean
    class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
    <property name="staticMethod"
      value="org.apache.shiro.SecurityUtils.setSecurityManager"></property>
    <property name="arguments" ref="securityManager"></property>
  </bean>

其中shiroFilter這個類主要用于需要攔截的url請求,需要注意的是這個是shiro的攔截,我們還需要配置cas的過濾配置casFilter

casRealm這個類是需要我們自己實現的,主要用于shiro的權限驗證,里面的屬性說明如下

1.defaultRoles: 默認的角色
2.casServerUrlPrefix: cas地址
3.casService: 系統應用地址

最后我們還需要在/spring-node-1/src/main/webapp/WEB-INF/web.xml 文件中配置相關的過濾器攔截全部請求

?
1
2
3
4
5
6
7
8
9
10
11
12
<filter>
    <filter-name>shiroFilter</filter-name>
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
    <init-param>
      <param-name>targetFilterLifecycle</param-name>
      <param-value>true</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>shiroFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

系統運行

1.端口說明,cas:8080,node1:8081,node2:8082,大家可以采用maven提供的tomcat7插件,配置如下:

?
1
2
3
4
5
6
7
8
9
10
11
<plugin>
    <groupId>org.apache.tomcat.maven</groupId>
    <artifactId>tomcat7-maven-plugin</artifactId>
    <version>2.1</version>
    <configuration>
      <port>8081</port>
      <uriEncoding>UTF-8</uriEncoding>
      <server>tomcat7</server>
      <path>/node1</path>
    </configuration>
  </plugin>

這樣的配置,我們甚至都不需要配置tomcat服務器了,建議這種方式

2.各個模塊的訪問地址

cas:http://127.0.0.1:8080/cas

node1:http://127.0.0.1:8081/node1

node2:http://127.0.0.1:8082/node2

3.訪問系統

輸入 http://127.0.0.1:8081/node1/shiro-cas ,進入cas驗證

輸入用戶名 admin,密碼 admin@2015,驗證成功后將會重定向到http://127.0.0.1:8081/node1//users/loginSuccess ,也就是node1系統的主頁,里面的節點2代表的是node2系統的主頁,你會發現我們不需要登錄到node2系統就能訪問其中的系統了

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:http://www.cnblogs.com/coderhuang/p/5897444.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 白丝出水 | 香蕉成人国产精品免费看网站 | 视频高清在线观看 | 免费午夜影院 | 韩国美女被的免费视频 | 草莓香蕉榴莲丝瓜秋葵绿巨人在线看 | 日韩欧美一区二区三区 | 精品国产免费第一区二区 | 暖暖日本高清 | 亚洲国产精品久久久久久 | 亚洲免费视频一区二区三区 | 波多野结在线观看 | 欧洲久久 | 免费国产午夜高清在线视频 | 欧美影院一区二区 | 国产在线观看人成激情视频 | 操岳母娘 | 97午夜视频 | 挺进白嫩老师下面视频 | 风间由美一区二区av101 | 热门小说同人h改编h | 波多野结衣作品在线观看 | 扒开放荡老师裙子猛烈的进入 | 久99视频精品免费观看福利 | 久久综合老色鬼网站 | 成年性生交大片免费看 | 国产一区国产二区国产三区 | 日本十大顶级绝伦推理片 | 98成人| 久久久无码精品亚洲A片猫咪 | 妇女澡堂淋浴性 | 色综合91久久精品中文字幕 | 国产偷窥女洗浴在线观看亚洲 | 俄罗斯男男激情1069gay | 久久久久久久久女黄9999 | 国产精品日本亚洲777 | 日本无遮挡吸乳视频看看 | 国产成人小视频在线观看 | 国产色视频一区二区三区 | 草莓香蕉榴莲丝瓜秋葵绿巨人在线看 | 国产精品久久久久一区二区三区 |