applicationContext-security-sso.xml 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans:beans xmlns="http://www.springframework.org/schema/security"
  3. xmlns:beans="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
  5. http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.1.xsd">
  6. <!-- 是否启动AOP权限控制 -->
  7. <global-method-security pre-post-annotations="enabled">
  8. <!--
  9. AspectJ pointcut expression that locates our "post" method and
  10. applies security that way <protect-pointcut expression="execution(*
  11. bigbank.*Service.post*(..))" access="ROLE_TELLER"/>
  12. -->
  13. </global-method-security>
  14. <!-- 常用资源不过滤 -->
  15. <http pattern="/resources/**" security="none"></http>
  16. <http pattern="/mobile/**" security="none"></http>
  17. <http pattern="/**/*.jpg" security="none"></http>
  18. <http pattern="/**/*.png" security="none"></http>
  19. <http pattern="/**/*.gif" security="none"></http>
  20. <http pattern="/**/*.css" security="none"></http>
  21. <http pattern="/**/*.js" security="none"></http>
  22. <!--
  23. 超时、禁止访问、页面找不到页面不过滤 <http pattern="/sessiontimeout.jsp"
  24. security="none"></http>
  25. -->
  26. <http pattern="/404.jsp" security="none"></http>
  27. <http pattern="/403.jsp" security="none"></http>
  28. <http pattern="/505.jsp" security="none"></http>
  29. <!-- 登陆 不过滤
  30. <http pattern="/login1.jsp" security="none"></http>-->
  31. <!-- 对外数据接口不过滤 -->
  32. <http pattern="/rest/**" security="none"></http>
  33. <http pattern="/app/mainView/**" security="none"></http>
  34. <http pattern="/app/common/**" security="none"></http>
  35. <http pattern="/app/sdk/**" security="none"></http>
  36. <http pattern="/app/images/**" security="none"></http>
  37. <!-- access-decision-manager-ref="baseAccessDecisionManager"-->
  38. <http auto-config="false" use-expressions="true" entry-point-ref="casAuthEntryPoint"
  39. access-denied-page="/403.jsp">
  40. <intercept-url pattern="/**/*" access="authenticated" />
  41. <!---->
  42. <session-management invalid-session-url="/j_spring_cas_security_check"
  43. session-fixation-protection="none">
  44. <concurrency-control max-sessions="1"
  45. error-if-maximum-exceeded="true" />
  46. </session-management>
  47. <custom-filter ref="casAuthenticationFilter" position="CAS_FILTER" />
  48. <custom-filter ref="requestSingleLogoutFilter" before="LOGOUT_FILTER" />
  49. <custom-filter ref="singleLogoutFilter" before="CAS_FILTER" />
  50. <custom-filter ref="baseSaveRequestUrlFilter" before="SESSION_MANAGEMENT_FILTER" />
  51. <custom-filter ref="baseSecurityFilter" before="FILTER_SECURITY_INTERCEPTOR" />
  52. </http>
  53. <!-- 保存首次请求地址过滤器 -->
  54. <beans:bean id="baseSaveRequestUrlFilter"
  55. class="com.xc.opal.security.filter.BaseSecuritySaveRequestUrlFilter">
  56. <!--
  57. <beans:property name="excludeUrl"
  58. value="/j_spring_cas_security_check,/j_spring_security_logout" />
  59. -->
  60. </beans:bean>
  61. <!-- 单点登录认证过滤器 -->
  62. <beans:bean id="casAuthenticationFilter"
  63. class="org.springframework.security.cas.web.CasAuthenticationFilter">
  64. <beans:property name="authenticationManager" ref="authenticationManager" />
  65. <beans:property name="authenticationFailureHandler"
  66. ref="authenticationFailureHandler" />
  67. <beans:property name="authenticationSuccessHandler"
  68. ref="authenticationSuccessHandler" />
  69. <beans:property name="filterProcessesUrl" value="/j_spring_cas_security_check" />
  70. </beans:bean>
  71. <!-- cas 认证失败控制器 -->
  72. <beans:bean id="authenticationFailureHandler"
  73. class="org.springframework.security.web.authentication.SimpleUrlAuthenticationFailureHandler">
  74. <beans:property name="defaultFailureUrl"
  75. value="${ISC_SSO_URL}/login?service=${APP_URL}" />
  76. </beans:bean>
  77. <!-- cas 认证成功控制器 -->
  78. <beans:bean id="authenticationSuccessHandler"
  79. class="com.xc.opal.security.authentication.BaseAuthenticationSuccessHandler"></beans:bean>
  80. <!--
  81. 注销客户端,单点登出,用于应用1注销后,cas服务端会向所有登陆cas的应用发送注销的请求,这样同一用户在应用1注销后,其它应用也会接受cas服务的注销请求
  82. -->
  83. <beans:bean id="singleLogoutFilter"
  84. class="org.jasig.cas.client.session.SingleSignOutFilter" />
  85. <!-- 注销服务器端 ,注销地址后面带上应用访问地址,用于注销后返回到登陆页面且带上应用地址-->
  86. <beans:bean id="requestSingleLogoutFilter"
  87. class="org.springframework.security.web.authentication.logout.LogoutFilter">
  88. <beans:constructor-arg value="${ISC_SSO_URL}/logout?service=${APP_URL}" />
  89. <beans:constructor-arg>
  90. <beans:list>
  91. <beans:bean
  92. class="org.springframework.security.web.authentication.logout.SecurityContextLogoutHandler" />
  93. <beans:bean
  94. class="com.xc.opal.security.authentication.logout.BaseLogoutSSOHandler"></beans:bean>
  95. </beans:list>
  96. </beans:constructor-arg>
  97. <beans:property name="filterProcessesUrl" value="/j_spring_security_logout" />
  98. </beans:bean>
  99. <!-- 登录成功后的返回地址 -->
  100. <beans:bean id="serviceProperties"
  101. class="org.springframework.security.cas.ServiceProperties">
  102. <beans:property name="service" value="${APP_URL}" />
  103. <!-- sendRenew 为 boolean 类型 当为 true 时每新打开窗口则需重新登录 -->
  104. <beans:property name="sendRenew" value="false" />
  105. </beans:bean>
  106. <!--
  107. CAS认证切入点,声明cas服务器端登录的地址,用户请求被保护的地址时抛出认证异常,而异常的切入点是本bean,从而重定向到SSO
  108. -->
  109. <beans:bean id="casAuthEntryPoint"
  110. class="com.xc.opal.security.authentication.cas.BaseCasAuthenticationEntryPoint">
  111. <beans:property name="loginUrl" value="${ISC_SSO_URL}/login" />
  112. <beans:property name="serviceProperties" ref="serviceProperties" />
  113. </beans:bean>
  114. <!-- cas认证提供器,定义客户端的验证方式 -->
  115. <beans:bean id="casAuthenticationProvider"
  116. class="org.springframework.security.cas.authentication.CasAuthenticationProvider">
  117. <!-- 客户端只验证用户名是否合法 -->
  118. <beans:property name="authenticationUserDetailsService">
  119. <beans:bean
  120. class="org.springframework.security.core.userdetails.UserDetailsByNameServiceWrapper">
  121. <beans:constructor-arg ref="baseUserDetailService" />
  122. </beans:bean>
  123. </beans:property>
  124. <beans:property name="serviceProperties" ref="serviceProperties" />
  125. <beans:property name="ticketValidator">
  126. <beans:bean
  127. class="org.jasig.cas.client.validation.Cas20ServiceTicketValidator">
  128. <beans:constructor-arg index="0" value="${ISC_SSO_URL}" />
  129. </beans:bean>
  130. </beans:property>
  131. <!-- 其他业务应用应修改此key,用以表示不同的应用key -->
  132. <beans:property name="key" value="opal-isc-cas" />
  133. </beans:bean>
  134. <!-- -->
  135. <authentication-manager alias="authenticationManager">
  136. <authentication-provider ref="casAuthenticationProvider" />
  137. </authentication-manager>
  138. <!--
  139. 事件日志 <beans:bean id="loggerListener"
  140. class="org.springframework.security.authentication.event.LoggerListener"
  141. />
  142. -->
  143. <!-- 获取客户端用户 -->
  144. <beans:bean id="baseUserDetailService"
  145. class="com.xc.opal.security.filter.BaseUserDetailsService" />
  146. <!-- 访问决策器,决定某个用户具有的角色,是否有足够的权限去访问某个资源。-->
  147. <beans:bean id="baseAccessDecisionManager"
  148. class="com.xc.opal.security.filter.BaseAccessDecisionManager">
  149. </beans:bean>
  150. <!--
  151. 安全URL拦截器 :
  152. FilterSecurityIntercepto,必须包含authenticationManager,accessDecisionManager,securityMetadataSource三个属性,
  153. 我们的所有控制将在这三个类中实现,解释详见具体配置
  154. -->
  155. <beans:bean id="baseSecurityFilter"
  156. class="com.xc.opal.security.filter.BaseSecurityInterceptorFilter">
  157. <beans:property name="authenticationManager" ref="authenticationManager" />
  158. <beans:property name="accessDecisionManager" ref="baseAccessDecisionManager" />
  159. <beans:property name="securityMetadataSource" ref="baseSecurityMetadataSource" />
  160. </beans:bean>
  161. <!-- 资源源数据定义,将所有的资源和权限对应关系建立起来,即定义某一资源可以被哪些角色去访问。 -->
  162. <beans:bean id="baseSecurityMetadataSource"
  163. class="com.xc.opal.security.filter.BaseInvocationSecurityMetadataSourceService">
  164. </beans:bean>
  165. <!--替换掉spring security的资源文件-->
  166. <beans:bean id="messageSource"
  167. class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
  168. <beans:property name="basename"
  169. value="classpath:org/springframework/security/messages_zh_CN" />
  170. </beans:bean>
  171. </beans:beans>