yangyang122 2024-07-29 13:52 采纳率: 0%
浏览 5
已结题

shiro springboot集成问题

#项目改造
我引入的spring-shiro.xml


```xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:util="http://www.springframework.org/schema/util"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd">

    <description>shiro权限配置</description>

    <!-- jdbc realm -->
    <bean id="shiroSampleRealm" class="com.iyunche.omp.server.service.impl.AuthorizingServiceImpl">
        <property name="cacheManager" ref="cacheManager" />
        <property name="credentialsMatcher">
            <bean class="org.apache.shiro.authc.credential.HashedCredentialsMatcher">
                <!--加密的策略-->
                <property name="hashAlgorithmName" value="MD5"/>
                 <property name="hashIterations" value="1" />
                 <property name="storedCredentialsHexEncoded" value="true" />
            </bean>
        </property>
    </bean>

    <!-- 安全管理器 -->
    <bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
        <!-- realm配置 -->
        <property name="realm" ref="shiroSampleRealm" />
        <!-- 记住我 -->
        <property name="rememberMeManager" ref="cookieRememberMeManager" />
         <!-- 定义要使用的session管理器 -->
        <property name="sessionManager" ref="sessionManager"/>
    </bean>
    <!-- 缓存管理器 -->
    <bean id="cacheManager" class="org.apache.shiro.cache.ehcache.EhCacheManager">
        <property name="cacheManagerConfigFile" value="classpath:shiro-ehcache.xml" />
    </bean>
    <bean id="permission" class="com.iyunche.omp.web.framework.authz.PermissionFilter" />
    <bean id="expireSessionFilter" class="com.iyunche.omp.web.framework.authz.SessionExpireFilter"></bean>
    
    <!-- shiro 过滤器 -->
    <bean id="shiroFilter"
        class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
        <property name="securityManager" ref="securityManager" />
        <!-- 登录页 -->
        <property name="loginUrl" value="/loginToPage" />
        <!-- 登录跳转主页 -->
        <property name="successUrl" value="/main" />
        <property name="unauthorizedUrl" value="/unauthorized"></property>
        <property name="filterChainDefinitionMap" value="#{permissionService.loadPermission()}" />
        <property name="filters">
            <map>
                <entry key="permission" value-ref="permission" />
                <entry key="expireSessionFilter" value-ref="expireSessionFilter" />
            </map>
        </property>
    </bean>

    <!-- 定义Session ID生成器 -->
    <bean id="sessionIdGenerator" class="org.apache.shiro.session.mgt.eis.JavaUuidSessionIdGenerator" />
    <!-- 配置Session DAO的操作处理 --> 
    <bean id="sessionDAO" class="org.apache.shiro.session.mgt.eis.EnterpriseCacheSessionDAO"> 
        <!-- 设置session缓存的名字,这个名字可以任意 --> 
        <property name="activeSessionsCacheName" value="shiro-activeSessionCache"/> 
        <!-- 定义该Session DAO操作中所使用的ID生成器 --> 
        <property name="sessionIdGenerator" ref="sessionIdGenerator"/> 
    </bean>
    <!-- 配置需要向Cookie中保存数据的配置模版 --> 
    <bean id="sessionIdCookie" class="org.apache.shiro.web.servlet.SimpleCookie"> 
        <!-- 在Tomcat运行下默认使用的Cookie的名字为JSESSIONID -->
         <constructor-arg value="JSESSIONID"/> 
        <!-- 保证该系统不会受到跨域的脚本操作供给 --> 
        <property name="httpOnly" value="true"/> 
        <!-- 定义Cookie的过期时间,单位为秒,如果设置为-1表示浏览器关闭,则Cookie消失 --> 
        <property name="maxAge" value="-1"/> 
    </bean>
    
    <!-- 定义会话管理器的操作 -->
    <bean id="sessionManager"
        class="org.apache.shiro.web.session.mgt.DefaultWebSessionManager">
        <!-- 定义的是全局的session会话超时时间,此操作会覆盖web.xml文件中的超时时间配置  1800000 单位毫秒  -->
        <property name="globalSessionTimeout" value="#{24*60*60*1000}"/>
        <!-- 删除所有无效的Session对象,此时的session被保存在了内存里面 -->
        <property name="deleteInvalidSessions" value="true"/>
        <!-- 定义要使用的无效的Session定时调度器 -->
        <property name="sessionValidationScheduler" ref="sessionValidationScheduler"/>
        <!-- 需要让此session可以使用该定时调度器进行检测 -->
        <property name="sessionValidationSchedulerEnabled" value="true"/>
        <!-- 定义Session可以进行序列化的工具类 -->
        <property name="sessionDAO" ref="sessionDAO"/>
        <!-- 所有的session一定要将id设置到Cookie之中,需要提供有Cookie的操作模版 -->
        <property name="sessionIdCookie" ref="sessionIdCookie"/>
        <!-- 定义sessionIdCookie模版可以进行操作的启用 -->
        <property name="sessionIdCookieEnabled" value="true"/>
    </bean>
    
    <!-- 配置session的定时验证检测程序类,以让无效的session释放 -->
    <bean id="sessionValidationScheduler" class="org.apache.shiro.session.mgt.ExecutorServiceSessionValidationScheduler">
        <!-- 间隔执行时间 毫秒 -->
        <property name="interval" value="#{30*1000}"></property>
        <property name="sessionManager" ref="sessionManager"></property>
    </bean>
    <bean id="rememberMeCookie" class="org.apache.shiro.web.servlet.SimpleCookie">
        <!-- 设置Cookie在浏览器中保存内容的名字,由用户自己来设置 -->
        <constructor-arg value="wms-cookie"></constructor-arg>
        <!-- 保证该系统不会受到跨域的脚本操作攻击 -->
        <property name="httpOnly" value="true"></property>
        <!-- 定义Cookie的过期时间,单位为秒,如果设置为-1标识浏览器关闭就失效 -->
        <property name="maxAge" value="#{3*24*60*60}"></property>
    </bean>
    
    <!-- 配置RememberMe功能的程序管理类 -->
    <bean id="cookieRememberMeManager" class="org.apache.shiro.web.mgt.CookieRememberMeManager">
        <property name="cookie" ref="rememberMeCookie"></property>
    </bean>

    <!-- Shiro life Processor -->
    <bean id="lifecycleBeanPostProcessor" class="org.apache.shiro.spring.LifecycleBeanPostProcessor" />

</beans>



shiroFilter中有loginUrl->/loginToPage(对应controler-jsp页码),出现问题: ERR_TOO_MANY_REDIRECTS,
loginToPage我已配置anon放行,也执行到了,但是还是报错。去掉shiro配置,可以正常访问页面
使用的框架是:springboot+shiro+springcloud这套,项目是旧项目改造。
也尝试配置DelegatingFilterProxy,依然出现:ERR_TOO_MANY_REDIRECTS

项目没有引用shiro相关的starter,只用spring-shiro web这些依赖

  • 写回答

3条回答 默认 最新

  • yangyang122 2024-07-29 14:07
    关注
    
    shiro.version=1.13.0    
    <dependency>
                <groupId>org.apache.shiro</groupId>
                <artifactId>shiro-core</artifactId>
                <version>${shiro.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.shiro</groupId>
                <artifactId>shiro-web</artifactId>
                <version>${shiro.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.shiro</groupId>
                <artifactId>shiro-spring</artifactId>
                <version>${shiro.version}</version>
            </dependency>
            <dependency>
                <artifactId>ehcache-core</artifactId>
                <groupId>net.sf.ehcache</groupId>
                <version>2.5.0</version>
            </dependency>
            <dependency>
                <groupId>org.apache.shiro</groupId>
                <artifactId>shiro-ehcache</artifactId>
                <version>${shiro.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.shiro</groupId>
                <artifactId>shiro-quartz</artifactId>
                <version>${shiro.version}</version>
            </dependency>
    
    
    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 7月29日
  • 赞助了问题酬金15元 7月29日
  • 修改了问题 7月29日
  • 创建了问题 7月29日

悬赏问题

  • ¥20 关于web前端如何播放二次加密m3u8视频的问题
  • ¥20 spring boot集成mqtt的使用问题
  • ¥15 使用百度地图api 位置函数报错?
  • ¥15 metamask如何添加TRON自定义网络
  • ¥66 关于川崎机器人调速问题
  • ¥15 winFrom界面无法打开
  • ¥30 crossover21 ARM64版本安装软件问题
  • ¥15 mymetaobjecthandler没有进入
  • ¥15 mmo能不能做客户端怪物
  • ¥15 osm下载到arcgis出错