shiro启用注解方式
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
shiro启⽤注解⽅式
shiro验证权限⽅式⼀种是基于url配置⽂件:
例如:
<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"/>
<!-- ⽆权访问跳转页⾯ -->
<property name="unauthorizedUrl" value="permNo"/>
<!-- ⾃定义权限页⾯设置url的访问权限。
anon表⽰不⽤验证,
都可以访问。
anthc:authc filter 监听,不登陆不能访问。
logout:logout filter监听。
没有列出的常⽤配置:perms["remote:invoke"] :需要⾓⾊romote 和权限invoke才能访问。
roles["admin"]需要⾓⾊admin才能访问。
设置可⽤“,”隔开,如:/admin/test = authc,roles[admin] -->
<property name="filterChainDefinitions">
<value>
<!-- ⽆参,表⽰需认证才能使⽤ -->
/home=authc
/resources/**=anon
</value>
</property>
</bean>
另外⼀种是基于注解:
例如:
RequiresAuthentication注解
RequiresAuthentication注解要求在访问或调⽤被注解的类/实例/⽅法时,Subject在当前的session中已经被验证。
@RequiresAuthentication
public void updateAccount(Account userAccount) {
//this method will only be invoked by a
//Subject that is guaranteed authenticated
...
}
RequiresGuest注解
RequiresGuest注解要求当前Subject是⼀个“访客”,也就是,在访问或调⽤被注解的类/实例/⽅法时,他们没有被认证或者在被前⼀个Session记住。
@RequiresGuest
public void signUp(User newUser) {
//this method will only be invoked by a
//Subject that is unknown/anonymous
...
}
RequiresPermissions 注解
RequiresPermissions 注解要求当前Subject在执⾏被注解的⽅法时具备⼀个或多个对应的权限。
@RequiresPermissions("account:create")
public void createAccount(Account account) {
//this method will only be invoked by a Subject
//that is permitted to create an account
...
}
RequiresRoles 注解
RequiresPermissions 注解要求当前Subject在执⾏被注解的⽅法时具备所有的⾓⾊,否则将抛出AuthorizationException异常。
@RequiresRoles("administrator")
public void deleteUser(User user) {
//this method will only be invoked by an administrator
...
}
如果在Controller中如果直接使⽤上⾯标签是不起作⽤的,需要开启shiro注解
bean id="myRealm" class="com.controller.MyRealm"/>
<bean id="securityManager"class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
<property name="realm"ref="myRealm"/>
</bean>
<!--========================-如果使⽤注解⽅式验证将下⾯代码放开===============================-->
<!-- 保证实现了Shiro内部lifecycle函数的bean执⾏ -->
<bean id="lifecycleBeanPostProcessor"class="org.apache.shiro.spring.LifecycleBeanPostProcessor"/>
<bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator" depends-on="lifecycleBeanPostProcessor">
<property name="proxyTargetClass" value="true" />
</bean>
<bean class="org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor">
<property name="securityManager"ref="securityManager"/>
</bean>
<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<property name="exceptionMappings">
<props>
<!--登录-->
<prop key="org.apache.shiro.authz.UnauthenticatedException">
redirect:/login
</prop>
<!--授权-->
<prop key="org.apache.shiro.authz.UnauthorizedException">
redirect:/admin/common/exceptionLog
</prop>
</props>
</property>
<property name="defaultErrorView" value="error/genericView"/>
</bean>
其中com.controller.MyRealm类是我⾃定义的继承⾃AuthorizingRealm的类。