ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

shiro权限注解和会话管理

2021-10-28 21:02:06  阅读:117  来源: 互联网

标签:service controller session user 注解 权限 shiro Subject


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的一个重要的应用场景。

 参考:尚硅谷

标签:service,controller,session,user,注解,权限,shiro,Subject
来源: https://blog.csdn.net/qq_41644069/article/details/121022399

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有