shiro处理两种路径进行登陆问题

1.以下是我的shiro配置:

<!-- shiro安全认证过滤器 -->

<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
  <!-- 安全管理类 -->
<property name="securityManager" ref="securityManager" />
<property name="loginUrl" value="${frontPath}/login" />
<!-- <property name="successUrl" value="/f/member/index" /> -->
<property name="filters">
            <map>
                <entry key="authc" value-ref="formAuthenticationFilter"/>
                <entry key="logout" value-ref="userLogoutFilter"/>
                <entry key="user" value-ref="userFilter"/>
            </map>
        </property>
        <!-- URL过滤器配置 -->
<property name="filterChainDefinitions">
<value>
/static/** = anon
/userfiles/** = anon
${frontPath}/login = authc
${frontPath}/logout = logout
${frontPath}/** = user
</value>
</property>

</bean>

当我需要使用两个地址都进行登陆时

添加了一句${frontPath}/welogin = authc  ,但是当我提交的地址是${frontPath}/welogin时却没有走登陆流程。

但是提交地址是${frontPath}/login时却正常进行了登陆


发现该方法:

 protected boolean isLoginRequest(ServletRequest request, ServletResponse response) {
        return pathsMatch(getLoginUrl(), request);
    }

shiro登陆时会判断是否是该地址和配置的登陆地址是否一样,如果不一样则不进行登陆。


2. 登陆操作时,shiro不会记录该登陆的请求,导致登陆成功后跳转到配置的登陆页,若没有配置默认/。

3.shiro只记录get方法请求路径









Shiro(Spring Security的一个分支,用于Web应用的权限管理)中,如果你想要允许特定路径的接口访问不受限制,可以利用`FilterChainDefinitionBuilder`或者直接在`shiro.ini`配置文件中进行设置。这里我将解释两种常见的方式: 1. **通过XML配置** (如果使用的是Spring Boot): ```xml <bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager"> <!-- ... --> <property name="filterChainDefinitions"> <value> /api/* = anon /api/login = logout <!-- 允许访问/api/yourSpecificPath接口 --> /api/yourSpecificPath = roles[USER] // 用户角色需要有访问该路径的权限 </value> </property> </bean> ``` 2. **通过Java配置(Spring Security 5+)**: ```java import org.apache.shiro.config.Ini; import org.apache.shiro.spring.web.ShiroFilterFactoryBean; @Configuration public class ShiroConfig { @Value("${shiro.ini.path:/path/to/shiro.ini}") private String iniPath; @Bean(name = "shiroFilter") public ShiroFilterFactoryBean shiroFilter() throws Exception { Ini ini = new Ini(); // ...加载ini配置 FilterChainDefinition chainDef = FilterChainDefinitionBuilder .newInstance() .antMatchers("/api/**").permitAll() // 允许所有/api开头的路径 .antMatchers("/api/yourSpecificPath").hasRole("USER") // 针对特定路径,仅用户角色可以访问 .build(); ShiroFilterFactoryBean factoryBean = new ShiroFilterFactoryBean(); factoryBean.setIni(ini); factoryBean.setFilterChainDefinitionMap(chainDef); return factoryBean; } } ``` 在这个例子中,"/api/yourSpecificPath"会被匹配,并且只有具有"USER"角色的用户才能访问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值