shiro权限注解和会话管理

本文详细介绍了Shiro的权限注解,包括@RequiresAuthentication、@RequiresUser、@RequiresGuest、@RequiresRoles和@RequiresPermissions的用法,并通过一个简单的实验展示了它们在Controller和Service层的应用。此外,还提到了Shiro会话管理的特性,如集群、失效/过期支持,并给出了解决注解失效问题的配置方法。最后,探讨了在Service中使用Shiro Session获取Controller数据的可能性。

1.shiro权限注解

注解可以放在controller对应的方法上,也可以放在service层对应的方法上。

@RequiresAuthentication:表示当前Subject已经通过login进行了身份验证;即Subject.isAuthenticated()返回true。

@RequiresUser:表示当前Subject已经身份验证或者通过记住我登录的。

@RequiresGuest:表示当前Subject没有身份验证或通过记住我登录过,即是游客身份。

@RequiresRoles(value={“admin”,“user”},logical=Logical.AND):表示当前Subject需要角色admin和user。

@RequiresPermissions(value={“user:a”,“user:b”},logical=Logical.OR):表示当前Subject需要权限user:a或user:b。

1.1简单实验

(1)编写ShiroService.java

@Service
public class ShiroService {
    @RequiresRoles({"admin"})
    public void testMethod(){
        System.out.println("testMethod, time: " + new Date());

        Session session = SecurityUtils.getSubject().getSession();
        Object val = session.getAttribute("key");

        System.out.println("Service SessionVal: " + val);
    }
}

(2)编写controller

@Autowired
    private ShiroService shiroService;

    @RequestMapping("/testShiroAnnotation")
    public String testShiroAnnotation(HttpSession session){
        session.setAttribute("key", "value12345");
        shiroService.testMethod();
        return "redirect:/list.jsp";
    }

(3)为方便起见,在list.jsp中测试。

<br><br>
<a href="shiro/testShiroAnnotation">Test ShiroAnnotation</a>

测试结果:

当我们使用admin登录时,我们可以点击测试。当我们使用user登录时,会报错误。

 1.2注意事项

(1)可能会出现shiro注解失效的问题,解决方法就是在springmvc的配置文件中加上如下配置:

 <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>

(2)在实际开发的时候,我们往往在service上面加上支持事务的注解,这个时候service已经是一个代理对象了。如果我们还在这里添加shiro的注解就不好用了,故在这种情况下应该加在controller上,否则会出现异常。

2.shiro会话管理

Shiro提供了完整的企业级会话管理功能,不依赖于底层容器(如web容器tomcat),不管JavaSE还是JavaEE环境都可以使用,提供了会话管理、会话事件监听、会话存储/持久化、容器无关的集群、失效/过期支持、对Web的透明支持、SSO单点登录的支持等特性。

在1.1实验中,已经含有session的简单实验(下图为控制台的打印)。这里我们在controller中使用的是http session,而在service中使用shiro session获取,这给我们提供了一个思路,我们在service中可以获得controller中的数据,这也是shiro session的一个重要的应用场景。

 参考:尚硅谷

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值