shiro 注解授权不起作用问题解决方案

本文介绍了解决Shiro注解授权不起作用的方法,包括在SpringMVC中正确配置注解支持、设置异常处理及自定义登录失败信息反馈。

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

对于shiro 注解授权不起作用的解决方案如下:

1.如果是springmvc进行整合的话 开启注解需要写在springmvc对应的配置文件内

//配置异常捕获

<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver"> 
<property name="exceptionMappings"> 
 <props> 
<prop key="org.apache.shiro.authz.UnauthorizedException">/error/302</prop>
 </props> 
 </property> 
</bean> 

//开启shiro注解
<bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator" depends-on="lifecycleBeanPostProcessor"/> 
<bean class="org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor">
  <property name="securityManager" ref="securityManager"/>
</bean>

shiro.xml配置如下:

<description>Shiro安全配置</description>


<!-- Shiro's main business-tier object for web-enabled applications -->
<bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
<property name="realm" ref="shiroDbRealm" />
</bean>


<!-- 項目自定义的Realm, 所有accountService依赖的dao都需要用depends-on声明 -->
<bean id="shiroDbRealm" class="com.hengbao.shiro.service.realm.ShiroDbRealm">
</bean>

<!-- Shiro Filter -->
<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
<property name="securityManager" ref="securityManager" />
<property name="loginUrl" value="/login" />
<property name="successUrl" value="/index.jsp" />
<property name="unauthorizedUrl" value="/error/302.jsp"/>//没有授权时跳转的错误页面
<property name="filterChainDefinitions">
<value>
/login = authc
/logout = logout
/static/** = anon
/api/** = anon
/register/** = anon
/admin/** = roles[admin]
/** = authc
</value>
</property>
</bean>



<!-- 保证实现了Shiro内部lifecycle函数的bean执行 -->
<bean id="lifecycleBeanPostProcessor" class="org.apache.shiro.spring.LifecycleBeanPostProcessor"/>

3.登陆界面接受准确的错误信息提示

接收准确的异常信息需要自定义filter 继承FormAuthenticationFilter 重写onLoginFailure方法 异常信息捕获到后传递给controller  详细代码如下:

protected boolean onLoginFailure(AuthenticationToken token,AuthenticationException e, ServletRequest request,ServletResponse response) {
boolean result = super.onLoginFailure(token, e, request, response);
String errorMessage = "用户名或者密码错误";
if (e instanceof CaptchaException) {
errorMessage = "验证码输入错误";

request.setAttribute("authenticationErrorMessage", errorMessage);
return result;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值