cas shiro 前后端分离 登录_springboot+shiro+cas 前后端分离 知识点汇总以及遇到的坑...

1.项目要接入cas服务,记录下这周的过程以及遇到的坑

1.配置CasRealem和AuthorizingRealm的区别

由于上个服务 自己用的springboot+shiro 而没有整合cas,上个服务是登录后直接去库里面查询,那么何时去加载这个Ream。 我刚开始是实现了AuthorizingRealm而不是CasRealem,之后交给spring管理,结果发现怎么都进入不到自己的ream里面。最后发现是配置的问题

package com.sq.unionmanage.gateway.api;

import com.sq.unionmanage.gateway.service.common.datasource.DataSourceConfig;

import com.sq.unionmanage.gateway.service.shiro.PlatformShiroFilterFactoryBean;

import com.sq.unionmanage.gateway.service.shiro.cache.RedisCacheManager;

import com.sq.unionmanage.gateway.service.shiro.filter.ShiroFormAuthenticationFilter;

import com.sq.unionmanage.gateway.service.shiro.filter.SqUserFilter;

import com.sq.unionmanage.gateway.service.shiro.realm.ShiroRealm;

import com.sq.unionmanage.gateway.service.shiro.session.RedisSessionDAO;

import com.sq.unionmanage.gateway.service.shiro.session.UuIdSessionIdGenerator;

import com.sq.unionmanage.gateway.service.util.DESUtil;

import org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor;

import org.apache.shiro.web.mgt.CookieRememberMeManager;

import org.apache.shiro.web.mgt.DefaultWebSecurityManager;

import org.apache.shiro.web.servlet.SimpleCookie;

import org.apache.shiro.web.session.mgt.DefaultWebSessionManager;

import org.jasig.cas.client.session.SingleSignOutFilter;

import org.springframework.beans.factory.annotation.Value;

import org.springframework.boot.autoconfigure.AutoConfigureAfter;

import org.springframework.boot.web.servlet.FilterRegistrationBean;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

import org.springframework.data.redis.core.RedisTemplate;

import org.springframework.web.filter.DelegatingFilterProxy;

import javax.annotation.Resource;

import javax.servlet.Filter;

import java.util.Base64;

import java.util.HashMap;

import java.util.LinkedHashMap;

import java.util.Map;/**

* @Author:

* @Date:2020/03/21

* @Description:*/@Configuration

@AutoConfigureAfter(DataSourceConfig.class)public classShiroConfiguration {

@Value(value= "${cms.login.url}")privateString cmsLoginUrl;

@Value(value= "${homepage.url}")privateString homePageUrl;

@Value(value= "${service.des.secret}")privateString serviceDesSecret;

@Value(value= "${sso.server.url}")privateString ssoServerUrl;

@Value(value= "${sso.login.url}")privateString ssoLoginUrl;

@Value(value= "${cms.server.url}")privateString cmsServerUrl;// @Resource(name="scosSerRedisTemplate")privateRedisTemplate scosSerRedisTemplate;

@Value("${cms.login.url}")private String localLoginUrl; //本地客户端的认证回调地址

@Value("${service.des.secret}")private String desSecret; //本地客户端的认证回调地址 的DES加密密钥

@BeanpublicShiroRealm shiroRealm(){

ShiroRealm shiroRealm= newShiroRealm();///* shiroRealm.setDefaultRoles("ROLE_USER");

shiroRealm.setCasServerUrlPrefix(ssoServerUrl);//casServic的作用是 登录成功后向客户端回调

shiroRealm.setCasService(cmsLoginUrl);returnshiroRealm;

}

@Bean(name="sessionIdGenerator")publicUuIdSessionIdGenerator sessionIdGenerator(){

UuIdSessionIdGenerator sessionIdGenerator= newUuIdSessionIdGenerator();returnsessionIdGenerator;

}

@Bean(name= "sessionDAO")publicRedisSessionDAO sessionDAO(UuIdSessionIdGenerator sessionIdGenerator){

RedisSessionDAO sessionDAO= newRedisSessionDAO();

sessionDAO.setActiveSessionsCacheName("shiro-activeSessionCache");

sessionDAO.setSessionIdGenerator(sessionIdGenerator);

sessionDAO.setRedisTemplate(scosSerRedisTemplate);returnsessionDAO;

}

@Bean(name= "sessionIdCookie")publicSimpleCookie sessionIdCookie(){

SimpleCookie sessionIdCookie= new SimpleCookie("unsid");

sessionIdCookie.setHttpOnly(true);

sessionIdCookie.setMaxAge(-1);returnsessionIdCookie;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Shiro中,判断session是否失效可以通过以下代码实现: ```java Subject subject = SecurityUtils.getSubject(); if (subject != null) { Session session = subject.getSession(false); if (session == null) { // session已经失效 } } ``` 上述代码中,首先通过`SecurityUtils.getSubject()`获取`Subject`对象,再通过`subject.getSession(false)`获取当前用户的`Session`对象,如果返回值为`null`,则表示`Session`已经失效。 当然,也可以通过在Shiro配置文件中配置`sessionManager`,设置`sessionValidationSchedulerEnabled`参数为`true`,开启Shiro的`Session`定期检查功能,实现自动检测`Session`是否失效。 另外,在Spring Boot中集成Shiro时,可以通过实现`SessionListener`接口,监听`Session`的创建、销毁和过期事件,并在事件触发时执行相应的操作。具体可参考以下代码示例: ```java @Component public class MySessionListener implements SessionListener { @Override public void onStart(Session session) { // Session创建时触发 } @Override public void onStop(Session session) { // Session销毁时触发 } @Override public void onExpiration(Session session) { // Session过期时触发 } } ``` 在以上代码中,实现了`SessionListener`接口,并在各个方法中编写相应的操作代码,以实现对`Session`的监听。最后,在Spring Boot配置文件中配置`shiro.sessionListeners`参数,将自定义的`SessionListener`注册到Shiro中即可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值