springboot前后端分离接入cas技术方案及实现(二)

1.在pom.xml中增加sso接入相关依赖

<!--cas-client-->
        <dependency>
            <groupId>org.jasig.cas.client</groupId>
            <artifactId>cas-client-core</artifactId>
            <version>3.4.1</version>
        </dependency>

        <dependency>
            <groupId>org.apache.shiro</groupId>
            <artifactId>shiro-core</artifactId>
            <version>${shiro.version}</version>
        </dependency>

        <dependency>
            <groupId>org.apache.shiro</groupId>
            <artifactId>shiro-cas</artifactId>
            <version>${shiro.version}</version>
        </dependency>

        <dependency>
            <groupId>org.apache.shiro</groupId>
            <artifactId>shiro-aspectj</artifactId>
            <version>${shiro.version}</version>
        </dependency>

        <!--单点登录-->
        <dependency>
            <groupId>org.pac4j</groupId>
            <artifactId>pac4j-cas</artifactId>
            <version>3.0.2</version>
        </dependency>
        <dependency>
            <groupId>io.buji</groupId>
            <artifactId>buji-pac4j</artifactId>
            <version>4.0.0</version>
            <exclusions>
                <exclusion>
                    <artifactId>shiro-web</artifactId>
                    <groupId>org.apache.shiro</groupId>
                </exclusion>
            </exclusions>
        </dependency>

 

2. 在springboot项目的配置文件application-dev.xml新增以下配置项:

#cas配置
cas:
  client-name: kb
  server:
    #cas服务端前缀,不是登录地
    url: http://127.0.0.1:8085/cas
  project:
    #当前客户端地址,即应用地址(域名)
    url: http://127.0.0.1:8088/kg
    #前端首页地址,用于sso验证成功后重定向到此页面(注意不是登陆页面,是登陆成功后的首页)
    ui-url: http://127.0.0.1:11000/admin/#/home

 3.重写ShiroConfig.java文件:

 


import io.buji.pac4j.filter.CallbackFilter;
import io.buji.pac4j.filter.LogoutFilter;
import io.buji.pac4j.filter.SecurityFilter;
import io.buji.pac4j.subject.Pac4jSubjectFactory;
import org.apache.shiro.spring.LifecycleBeanPostProcessor;
import org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor;
import org.apache.shiro.spring.web.ShiroFilterFactoryBean;
import org.apache.shiro.web.mgt.DefaultWebSecurityManager;
import org.jasig.cas.client.session.SingleSignOutFilter;
import org.jasig.cas.client.session.SingleSignOutHttpSessionListener;
import org.pac4j.core.config.Config;
import org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.boot.web.servlet.ServletListenerRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.DependsOn;
import org.springframework.core.Ordered;
import org.springframework.core.annotation.Order;
import org.springframework.web.filter.DelegatingFilterProxy;

import javax.servlet.DispatcherType;
import javax.servlet.Filter;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;

/**
 * cas整合shiro
 * @author jay
 * @date 2019-12-20
 *
 */
@Configuration
public class CasShiroConfig {


    /**
     * 项目工程路径
     */
    @Value("${cas.project.url}")
    private String projectUrl;

    /**
     * 项目cas服务路径
     */
    @Value("${cas.server.url}")
    private String casServerUrl;

    /**
     * 客户端名称
     */
    @Value("${cas.client-name}")
    private String clientName;




    /**
     * 单点登出的listener
     *
     * @return
     */
    @SuppressWarnings({"rawtypes", "unchecked"})
    @Bean
    public ServletListenerRegistrationBean<?> singleSignOutHttpSessionListener() {
        ServletListenerRegistrationBean bean = new ServletListenerRegistrationBean();
        bean.setListener(new SingleSignOutHttpSessionListener());
        bean.setEnabled(true);
        return bean;
    }

    /**
     * 单点登出filter
     *
     * @return
     */
    @Bean
    @Order(Ordered.HIGHEST_PRECEDENCE)
    public FilterRegistrationBean singleSignOutFilter() {
        FilterRegistrationBean bean = new FilterRegistrationBean();
        bean.setName("singleSignOutFilter");
        SingleSignOutFilter singleSignOutFilter = new SingleS
  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
### 回答1: Spring Boot CAS 前后分离是一种常见的架构模式,它将前和后分离开来,使得前和后可以独立开发、测试和部署。CAS(Central Authentication Service)是一种单点登录系统,它可以实现用户在多个应用系统中的单点登录和注销。在 Spring Boot CAS 前后分离架构中,前通过 AJAX 请求后的 RESTful API 来获取数据,后则负责处理业务逻辑和数据存储。CAS 服务器则负责用户认证和授权,通过 CAS 协议来实现单点登录和注销。这种架构模式可以提高系统的可维护性、可扩展性和安全性,同时也可以提高开发效率和用户体验。 ### 回答2: Spring Boot是一个流行的Java框架,用于快速创建基于Spring的应用程序。CAS(Central Authentication Service)是一个单点登录协议,允许用户一次登录即可在多个应用程序中访问受保护的资源。Spring Boot和CAS可以很好地结合使用,以实现前后分离的应用程序。 前后分离是指将应用程序的前和后分开发展。前通常由JavaScript、HTML和CSS构建,使用框架如Vue、React或Angular。后使用Java或其他语言,通常使用Spring Boot等框架开发。在前后分离的应用程序中,前通过RESTful API与后通信,并且通常由单独部署的服务器提供服务。 像CAS这样的单点登录协议可以很好地支持前后分离的应用程序。在这种情况下,前负责在CAS服务器上进行身份验证并获得用户凭证。凭证随后使用AJAX请求发送到后,以获得对受保护资源的访问权限。后应用程序需要集成CAS客户库,以验证请求的凭证并授予访问权限。 使用Spring Boot和CAS实现前后分离的应用程序有许多优点。首先,这种方法可以提高应用程序的安全性。将身份验证逻辑集中在CAS服务器上可以确保凭证和用户的私人信息得到妥善保护。此外,前后分离的应用程序通常更易于维护。由于前和后分开开发,因此可以使用不同的框架和语言,使得应用程序更具弹性和可扩展性。此外,在前后分离的应用程序中,可以更轻松地实现可重复使用的代码,从而节省了时间和资源。 总之,Spring Boot和CAS实现前后分离的强大工具。这种方法可以提高应用程序的安全性、可维护性和可扩展性。如果您正在考虑构建一个前后分离的应用程序,那么使用Spring Boot和CAS可能是一个很好的选择。 ### 回答3: SpringBoot是一个开箱即用的框架,可以帮开发者快速搭建Web应用程序。而CAS(Central Authentication Service)则是一个认证系统,用户只需要登录一次CAS系统,就可以在各个不同的应用中共享该登录状态。 在前后分离的架构中,CAS的认证系统可以用于对前后的用户进行登录认证。在前页面中,通过用户名和密码登录后,前会调用CAS的API接口进行登录认证,验证通过后,返回一个Token给前。前页面可以使用该Token跨域向后API发起请求,后API会通过前传递的Token进行认证,从而保证API的安全性和可访问性。 在使用SpringBoot构建后API时,可以使用Spring Security框架集成CAS认证,根据前传递的Token进行认证。这样,后API不仅可以保证接口的安全性,还能够避免因为每个应用都需要独立实现登录认证功能而导致的代码冗余。 同时,前后分离的架构也可以帮助开发者提高开发效率和应用可扩展性。因为前后可以独立开发、独立部署,开发者可以专注于各自的领域,减少不必要的沟通和协调工作。同时,当应用负载增大时,可以通过扩展前或后服务器数量来解决瓶颈,而不用对整个应用进行重构。 总之,前后分离的架构可以提高开发效率、增强应用可扩展性,而CAS认证系统可以帮助开发者实现安全认证,保障整个应用系统的安全性和可用性。平衡好前后的工作,使用CAS实现单点登录认证,这对于构建大型Web应用程序非常有帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值