spring security

本文介绍如何在Spring Security框架中实现安全认证,并结合CAS单点登录服务进行多系统间的身份认证和管理。文中详细阐述了配置步骤、执行流程及常见问题解决方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

建表,

用户表,角色表,权限表
在这里插入图片描述
spring security 安全认证的框架
背景:是在一个基本的ssm 项目上搭建的,只是校验用户的身份,但是遇到很多困难与错误

怎么快速如门

图1
在这里插入图片描述
图2
在这里插入图片描述
图3
在这里插入图片描述
图4
在这里插入图片描述
图5
在这里插入图片描述
图6
在这里插入图片描述
图7
在这里插入图片描述
图8
在这里插入图片描述
图9

   <!-- 用于单点退出,该过滤器用于实现单点登出功能,可选配置 -------------------退出-------------------------------->  
    <listener>  
     <listener-class>org.jasig.cas.client.session.SingleSignOutHttpSessionListener</listener-class>  
    </listener>  
    <!-- 该过滤器用于实现单点登出功能,可选配置。 -->  
    <filter>  
        <filter-name>CAS Single Sign Out Filter</filter-name>  
       <filter-class>org.jasig.cas.client.session.SingleSignOutFilter</filter-class>  
    </filter>  
    <filter-mapping>  
        <filter-name>CAS Single Sign Out Filter</filter-name>  
        <url-pattern>/*</url-pattern>  
    </filter-mapping>  
    <!-- 该过滤器负责用户的认证工作,必须启用它-----------------------登录---------------------- -->  
    <filter>  
        <filter-name>CASFilter</filter-name>       <filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class>  
        <init-param>  
            <param-name>casServerLoginUrl</param-name>  
            <param-value>http://localhost:9100/cas/login</param-value>  
            <!--这里的server是服务端的IP{告诉客户端,拦截到的客户端,你要跳转的服务端地址在哪里,就是***重定向***} -->  
        </init-param>  
        <init-param>  
            <param-name>serverName</param-name>  
            <param-value>http://localhost:9001</param-value>//本身的当前应用的地址,因为重定向要跳转回来
        </init-param>  
    </filter>  
    <filter-mapping>  
        <filter-name>CASFilter</filter-name>  
        <url-pattern>/*</url-pattern>  
    </filter-mapping>  
    <!-- 该过滤器负责对Ticket的校验工作,必须启用它 -->  
    <filter>  
        <filter-name>CAS Validation Filter</filter-name>  
        <filter-class>org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter</filter-class>  
        <init-param>  
            <param-name>casServerUrlPrefix</param-name>  
            <param-value>http://localhost:9100/cas</param-value>  //服务器地址
        </init-param>  
        <init-param>  
            <param-name>serverName</param-name>  
            <param-value>http://localhost:9001</param-value>//本机地址
        </init-param>  
    </filter>  
    <filter-mapping>  
        <filter-name>CAS Validation Filter</filter-name>  
        <url-pattern>/*</url-pattern>  
    </filter-mapping>  
    
    <!-- 该过滤器负责实现HttpServletRequest请求的包裹, 比如允许开发者通过HttpServletRequest的getRemoteUser()方法获得SSO登录用户的登录名,可选配置。 -->  
    <filter>  
        <filter-name>CAS HttpServletRequest Wrapper Filter</filter-name>  
        <filter-class>  
            org.jasig.cas.client.util.HttpServletRequestWrapperFilter</filter-class>  
    </filter>  
    <filter-mapping>  
        <filter-name>CAS HttpServletRequest Wrapper Filter</filter-name>  
        <url-pattern>/*</url-pattern>  
    </filter-mapping>  
    
    <!-- 该过滤器使得开发者可以通过org.jasig.cas.client.util.AssertionHolder来获取用户的登录名。 比如AssertionHolder.getAssertion().getPrincipal().getName()。 -->  
    <filter>  
        <filter-name>CAS Assertion Thread Local Filter</filter-name>       
        <filter-class>org.jasig.cas.client.util.AssertionThreadLocalFilter</filter-class>  
    </filter>  
    <filter-mapping>  
        <filter-name>CAS Assertion Thread Local Filter</filter-name>  
        <url-pattern>/*</url-pattern>  
    </filter-mapping>  
  1. 配置pom文件 ,加入spring-security相关的依赖,
  2. 配置web.xml ,在其中加入过滤器,参考图1;读取配置文件图2,
    注意:如果没有使用ContextLoaderListener. 同样可以使用import的方式,加载spring-security配置文件
  3. 建立spring-security.xml配置文件 ,设置不拦截页面,设置拦截规则(/** 拦截所有,access是权限认证,) 设置 调用认证管理器(引入认证类) 认证成功之后跳转成功页面,失败跳转,
  4. 认证类开始
    1.service接口,就实现一个UserDetailsService
    2.实现类,继承接口,重写loadUserByUsername方法,new一个User类,调用dao层,User类的参数,就是数据的对比,(因为User类返回的是UserDetails 类,)图4
  5. dao层数据的查询了

执行流程//运行原理,图5

加密 图6

存:是在商家入驻,注册时候提交的用户与密码,密码进行md5加密换算,存放在数据库中
读取对比,密码的校验,
## 其实就是利用md5工具类加密,之后对数据库已经加密的数据进行比对

cas单点登录的情况,什么时候使用,什么使用可以不用使用

++++以前以为的是在一个系统中,不同页面的登录,需要到单点登录,貌似用不到单点登录,使用session的共享,就可以解决这个问题。
++++单点登录在多平台的情况下使用,例如:淘宝,在咸鱼上,在天猫上,他们度隶属一个阿里所有,但是还是在不同的平台上,这个使用就使用上CAS单点登录,专门用一个服务,你要是想登录,直接在上我的登录的一个服务就行了。这样的跨平台的情况下,使用CAS。

cas单点登录  图7

为什么使用cas?
##为了解决分布式项目中的单点登录问题,传统的项目中部署在一个服务器上,可以session共享来达到登录的同步,但是呢,在分布式的项目中,每一个模块都是不同的服务器上,不能满足数据的共享了,所以出现cas,
cas 的定义,SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。 图8

cas的执行流程

  1. 访问服务:SSO客户端发送请求访问应用系统提供的服务资源。
  2. 定向认证:SSO客户端会重定向用户请求到SSO服务器。
  3. 用户认证:用户身份认证。
  4. 发放票据:SSO服务器会产生一个随机的Service Ticket。
  5. 验证票据:SSO服务器验证票据Service Ticket的合法性,验证通过后,允许客户端访问服务。
  6. 传输用户信息:SSO服务器验证票据通过后,传输用户认证结果信息给客户端。

cas的快速入门

1.pom文件引入依赖 cas-client-core 与 servlet-api
2.添加web.xml 图9
3.

遇到的问题

Error creating bean with name ‘org.springframework.security.filterChains’: Cannot resolve reference to bean ‘org.springframework.security.web.DefaultSecurityFilterChain#0’ while setting bean property
##是spring security 的jar包问题,jar包冲突问题很是头大
改成 <spring.security.version>4.0.3.RELEASE</spring.security.version>,就没事儿了
2.支持多系统登录吗?
3.支持多系统同时登录吗?
4.支持同一台电脑换个浏览器同时登录吗??

错误
1.Error creating bean with name ‘org.springframework.security.filterChainProxy’: Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: A universal match pattern (’/**’) is defined before other patterns in the filter chain, causing them to be ignored. Please check the ordering in your
security:http namespace or FilterChainProxy bean configuration
在这里插入图片描述
spring controlller需要先加载,后面的没有先后之分

错误2.过滤器的问题 ,第二个问题就是,启动时成功了,但是没有拦截到login。Jsp 页面中 ,直接到index.jsp中
在这里插入图片描述
在这里插入图片描述
3. /* 与 /**
/* 是拦截所有的文件夹,不包含子文件夹
/** 是拦截所有的文件夹及里面的子文件夹

严重: Exception starting filter springSecurityFilterChain
org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named ‘springSecurityFilterChain’ available
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefinition(DefaultListableBeanFactory.java:685)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值