返回顶部
首页 > 资讯 > 后端开发 > Python >spring security3 之 C
  • 620
分享到

spring security3 之 C

spring 2023-01-31 06:01:33 620人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

Spring Security 和 CAS 交互流程WEB用户访问服务公共页面,没有涉及spring Security和CAS用户访问一个受保护的页面或页面中使用了一个受保护的bean,Spring Security的ExceptionTr

Spring Security 和 CAS 交互流程

  1. WEB用户访问服务公共页面,没有涉及spring Security和CAS

  2. 用户访问一个受保护的页面或页面中使用了一个受保护的bean,Spring Security的ExceptionTranslationFilter 发现异常AccessDeniedException 或AuthenticationException

  3. 用户的Authentication 对象(或缺少该对象)触发AuthenticationException,ExceptionTranslationFilter 将调用配置的AuthenticationEntryPoint,如果使用CAS,则调用的是CasAuthenticationEntryPoint 类

  4. CasAuthenticationEntryPoint 将用户浏览器跳转到CAS服务器,它指定了一个service参数,该参数是Spring Security服务的回调URL。例如,浏览器跳转的URL可能是https://my.company.com/cas/login?service=Https%3A%2F%2Fserver3.company.com%2Fwebapp%2Fj_spring_cas_security_check

  5. 在用户浏览器调转到CAS后,将被提示输入用户名和密码,如果用户提供了一个session cookie表明之前登录过,将不再被提示登录。CAS将使用 PassWordHandler (如果使用CAS3.0则是AuthenticationHandler)判断用户名和密码是否有效

  6. 成功登陆,CAS将用户浏览器跳转到原来的服务。它将包含一个ticket参数,它是一个表示服务票据的加密字符串。延续我们之前的例子,浏览器跳转的URL可能是https://server3.company.com/webapp/j_spring_cas_security_check?ticket=ST-0-ER94xMJmn6pha35CQRoZ


  7. 回到web应用,CasAuthenticationFilter总是监听/j_spring_cas_security_check请求,这是可配置的,我们这里使用默认配置。该处理过滤器将构造一个表示服务票据的UsernamePasswordAuthenticationToken。其中principal属性的值是CasAuthenticationFilter.CAS_STATEFUL_IDENTIFIER,credentials属性的值是服务票据加密的值。然后这个认证请求将被配置的AuthenticationManager处理

  8. AuthenticationManager的实现是ProviderManager,它又由CasAuthenticationProvider实现。CasAuthenticationProvider只对包含了CAS特殊主体(如CasAuthenticationFilter.CAS_STATEFUL_IDENTIFIER)和CasAuthenticationTokens的UsernamePasswordAuthenticationTokens 做出响应。

  9. CasAuthenticationProvider 通过一个TicketValidator的实现类校验服务票据。典型的实现类是Cas20ServiceTicketValidator,它包含在CAS客户端库中。对于部分需要校验代理票据的应用,使用Cas20ProxyTicketValidator。TicketValidator 发送一个HTTPS请求到CAS服务器以校验服务票据。它可能还包含一个代理回调URL,该例中为:https://my.company.com/cas/proxyValidate?service=https%3A%2F%2Fserver3.company.com%2Fwebapp%2Fj_spring_cas_security_check&ticket=ST-0-ER94xMJmn6pha35CQRoZ&pgtUrl=https://server3.company.com/webapp/j_spring_cas_security_proxyreceptor

  10. 回到CAS服务器,校验请求将被接收。如果提供的服务票据和票据发布的服务URL相匹配,CAS将提供一个赞成的响应,并在XML中指定用户名。如果在认证中关联了任何代理,则XML响应中还包含代理的列表

  11. Cas20TicketValidator 解析从CAS服务器收到的XML,它给CasAuthenticationProvider 返回一个TicketResponse,其中包含用户名和代理列表

  12. 接下来CasAuthenticationProvider 调用一个配置的CasProxyDecider。CasProxyDecider 指出TicketResponse中包含的代理列表是否可以被服务所接受。Spring Security提供了一些它的实现,包括RejectProxyTickets、AcceptAnyCasProxy和NamedCasProxyDecider。这些名字很大程度都能自我解释,除了NamedCasProxyDecider,它允许一个被信任的代理列表

  13. CasAuthenticationProvider 接下来将请求AuthenticationUserDetailsService 去加载应用于包含在Assertion中用户的GrantedAuthority 对象

  14. 如果没有任何问题,CasAuthenticationProvider 将构造一个包含TicketResponse和GrantedAuthority 中所包含详情的CasAuthenticationToken。

  15. 然后控制权转交给CasAuthenticationFilter,它将创建的CasAuthenticationToken 放进security context中

  16. 用户浏览器被跳转到引起AuthenticationException 的原始页面(或者一个自定义目的地,这取决于配置)


Spring Security和CAS配置

<?xml version="1.0"encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:security="http://www.springframework.org/schema/security"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.0.xsd">
<security:http entry-point-ref="casProcessingFilterEntryPoint" use-expressions="true" access-denied-page="/errors/403">
    <security:intercept-urlpattern="/resources/**" filters="none" />
    <security:intercept-urlpattern="/api/**" filters="none" />
    <security:intercept-urlpattern="/**" access="hasRole('ROLE_USER')" />
    <security:loGout logout-success-url="${cas.auth.server}/logout?service=${cas.local.server}"/>
    <security:custom-filterref="casAuthenticationFilter" after="CAS_FILTER"/>
</security:http>
<security:authentication-manager alias="authenticationManager">
    <security:authentication-provider ref="casAuthenticationProvider"/>
</security:authentication-manager>

<bean id="securityContextPersistenceFilter"
class="org.springframework.security.web.context.SecurityContextPersistenceFilter">
    <property name="securityContextRepository">
        <bean class="org.springframework.security.web.context.HttpSessionSecurityContextRepository">
            <property name="allowSessionCreation" value="false" />
        </bean>
    </property>
</bean>
    
<bean id="casAuthenticationFilter" class="org.springframework.security.cas.web.CasAuthenticationFilter">
    <property name="authenticationManager" ref="authenticationManager"/>
    <property name="authenticationFailureHandler">
        <bean class="org.springframework.security.web.authentication.SimpleUrlAuthenticationFailureHandler">
             <property name="defaultFailureUrl" value="/errors/403"/>
        </bean>
    </property>
    <property name="authenticationSuccesshandler">
        <bean class="com.baidu.issue.internal.security.login.SimpleLoginSuccessHandler">
            <property name="defaultTargetUrl" value="/"/>
        </bean>
    </property>
    <property name="proxyGrantingTicketStorage"ref="proxyGrantingTicketStorage" />
    <property name="proxyReceptorUrl" value="/secure/receptor" />
</bean>

<bean id="casProcessingFilterEntryPoint" class="org.springframework.security.cas.web.CasAuthenticationEntryPoint">
     <property name="loginUrl" value="${cas.auth.server}/login"/>
    <property name="serviceProperties" ref="serviceProperties"/>
</bean>

<bean id="casAuthenticationProvider" class="org.springframework.security.cas.authentication.CasAuthenticationProvider" autowire="byType">
    <property name="userDetailsService"ref="userDetailsService"/>
    <property name="serviceProperties" ref="serviceProperties" />
    <property name="ticketValidator">
        <bean class="org.jasig.cas.client.validation.Cas20ServiceTicketValidator">
            <constructor-arg index="0" value="${cas.auth.server}" />
            <property name="proxyGrantingTicketStorage"ref="proxyGrantingTicketStorage" />
            <property name="proxyCallbackUrl" value="${cas.local.server}/secure/receptor" />
        </bean>
    </property>
    <property name="key" value="will_project"/>
</bean>

<bean id="proxyGrantingTicketStorage" class="org.jasig.cas.client.proxy.ProxyGrantingTicketStorageImpl"/>

<bean id="serviceProperties" class="org.springframework.security.cas.ServiceProperties">
    <property name="service" value="${cas.local.server}/j_spring_cas_security_check"/>
    <property name="sendRenew" value="false"/>
</bean>
</beans>


--结束END--

本文标题: spring security3 之 C

本文链接: https://lsjlt.com/news/189836.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • spring security3 之 C
    Spring Security 和 CAS 交互流程web用户访问服务公共页面,没有涉及Spring Security和CAS用户访问一个受保护的页面或页面中使用了一个受保护的bean,Spring Security的ExceptionTr...
    99+
    2023-01-31
    spring
  • Spring Security3
      项目用户权限备用,From:http://www.blogjava.net/SpartaYew/archive/2011/05/19/SpingSecurity3.html 使用Spring Security3的四种方法概述     ...
    99+
    2023-01-31
    Spring
  • spring security3 dem
    这两天在看spring security3的一些内容,走了一些路,也耗费了一些时间,在这里做一下记录,能给大家一些帮助是最好不过的了。 spring 官方网站下载地址:http://www.springsource.org/download...
    99+
    2023-01-31
    spring dem
  • Spring Boot Sample 024之spring-boot-data-influxdb
    一、环境 Idea 2020.1 JDK 1.8 maven 二、目的 spring boot 通过整合influxdb gitHub地址: https://github.com/ouyushan/ouyushan-spring-boo...
    99+
    2018-10-02
    Spring Boot Sample 024之spring-boot-data-influxdb 数据库入门 数据库基础教程 数据库 mysql
  • Spring之spring-context-indexer依赖详解
    目录Spring spring-context-indexer依赖配置springboot启动时自动打开浏览器 spring-context-indexer原理spring-cont...
    99+
    2024-04-02
  • 七、Spring MVC之ModelAttribute
        前面几篇文章分别说了spring mvc如何传参数到后台,如何返回参数到前台。今天来说一下,spring mvc的ModelAttribute注解,这个注解有什么作用,...
    99+
    2024-04-02
  • Java之Spring知识点
    1.AOP的概念是Aspected Oriented Programming 面向方面编程。好处:AOP将程序分解成各个方面或者说关注点。这使得可以模块化,相当横向上分切了。它可以解决OOP和过程化方法不能...
    99+
    2024-04-02
  • Spring之什么是IoC
    本篇内容主要讲解“Spring之什么是IoC”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Spring之什么是IoC”吧!Spring Hello World ...
    99+
    2024-04-02
  • Spring Boot学习之Shiro
    文章目录 零 全部源码地址一 Shiro简介1.1 Shiro功能1.2 Shiro架构(外部视角)1.3 Shiro架构(内部视角) 二 Shiro快速入门2.1 演示代码&部分源码解读...
    99+
    2023-09-29
    spring boot 学习 java
  • Java之Spring整合Junit
    目录1 测试类中的问题和解决思路1.1 问题1.2 解决思路分析2 配置步骤2.1 第一步:拷贝整合 junit 的必备 jar 包到 lib 目录2.2 第二步:使用@RunWit...
    99+
    2023-05-14
    Java Spring整合Junit Spring整合Junit
  • Spring注解解析之@ImportResource
    目录一、ImportResource1.1 定义包和类1.2 定义配置文件1.3 定义Java Config类1.4 测试代码二、运行一、ImportResource 1.1 定义包...
    99+
    2024-04-02
  • Spring源码解析之Configuration
    目录一、@Configuration1.1 未加@Configuration1.2 加上@Configuration1.3 Cglib动态代理二、源码跟踪2.1 Annotation...
    99+
    2024-04-02
  • Spring之DI深入理解
    本篇内容主要讲解“Spring之DI深入理解”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Spring之DI深入理解”吧!DI概念IoC 其实有两种方式,一种就...
    99+
    2024-04-02
  • Spring注解之Service详解
    目录 @[TOC](目录) Service注解Service用法及示例传统方式是怎么做的呢?@Service注解是怎么体现业务逻辑复用的? 总结 Service注...
    99+
    2023-08-31
    spring spring boot java
  • Spring 框架之九阴真经
    Chapter One . Spring 事务配置1.事务(Transaction)是并发控制的单位,是用户定义的一个操作序列。   这些操作要么都做,要么都不做,是一个不可分割的工作单...
    99+
    2024-04-02
  • Spring和SpringBoot之间的区别
    目录Spring是什么? Spring Boot是什么? Maven依赖项 springboot为不同的Spring模块提供了许多启动程序依赖项。最常用的方法有:MVC配置 配置模板...
    99+
    2024-04-02
  • Spring系列之事物管理
    目录前言Spring事务抽象Spring之编程式事物声明式事物事物失效的8种情况及解决办法前言 我们都知道Spring给我们提供了很多抽象,比如我们在操作数据库的过程中,它为我们提供...
    99+
    2024-04-02
  • spring之SpEL表达式详解
    目录1.什么是SpEL表达式2.SpEL表达式语言入门程序(1)xml配置的方式(2)采用注解的方式3.分析器4.使用SpEL表达式调用方法(1)使用SpEL调用普通方法(2)使用S...
    99+
    2024-04-02
  • Spring之BeanPostProcessor的示例分析
    小编给大家分享一下Spring之BeanPostProcessor的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、简介BeanPostProcesso...
    99+
    2023-06-15
  • Spring MVC之characterEncodingFilter有什么用
    characterEncodingFilter是Spring MVC中的一个过滤器。它的作用是用来处理请求和响应的字符编码。在Web...
    99+
    2023-09-21
    Spring MVC
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作