前面做了一次登录了,你的权限shiro已经帮你管理了。
发现原因了 之前需要有登陆的步骤。。
你对请求放行了吗
你登陆了,subject内有信息,服务器为关闭,肯定有你的信息,你是admin角色所以可以访问testrole,没有admin1这个角色所以报错
头部缺少AOP的命名空间
xmlns:aop="http://www.springframework.org/schema/aop"
在spring.xml 你加了<import xxxxxxxxxxxx>这行没
如果用了SpringMVC的话,设置的shiro的跳转貌似是没用的,这时候要在springMVC 里面配置,捕获异常并跳转:
<!-- 捕获无权限的异常进行跳转 --> <bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver"> <property name="exceptionMappings"> <props> <prop key="org.apache.shiro.authz.UnauthorizedException"> /unauthorized </prop> </props> </property> </bean>
在controller中写一个方法,映射路径:
@RequestMapping("/unauthorized") public String unauthorized() { return "/403.html"; }
放到spring.xml中可以了
<bean id="lifecycleBeanPostProcessor" class="org.apache.shiro.spring.LifecycleBeanPostProcessor"/> <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> <!-- 5. 启用 IOC 容器中使用 shiro 的注解. 但必须在配置了 LifecycleBeanPostProcessor 之后才可以使用. --> <bean id="secureRemoteInvocationExecutor" class="org.apache.shiro.spring.remoting.SecureRemoteInvocationExecutor"> <property name="securityManager" ref="securityManager"/> </bean>
问题解决了,是通过在pom.xml配置中引入
<dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.8.9</version> </dependency>
解决的。
可以去掉<aop:config> 添加<bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator" depends-on="lifecycleBeanPostProcessor">
<property name="proxyTargetClass" value="true" />
</bean> 试试
谢谢您的建议,应该是aop的jar包问题。换了一下我们项目中的相关jar包就解决了,谢谢。
spring mvc 配置文件有没有开启注解
<mvc:annotation-driven />