shiro使用注解式和jsp标签的方式进行开发
2017-02-15 20:47
477 查看
原先的时候可以使用url的shiro配置方式进行拦截,但是发现url地址过多会配置繁琐,解决的方式就是使用aop注解式和jsp标签进行开发
原来的方式
那么这个Permission是怎么进行设置的呢
答案在授权方法中
spring开启aop 两种配置方式
用一种即可
jsp标签
Jsp页面添加:
<%@ tagliburi="http://shiro.apache.org/tags" prefix="shiro" %>或者自定义shiro标签
<shiro:principal property="username"/> 显示用户身份中的属性值
注意:无论是jsp还是aop都会每次都调用realm进行访问数据库获取权限信息
原来的方式
<!-- Shiro权限过滤过滤器定义 --> <bean name="shiroFilterChainDefinitions" class="java.lang.String"> <!-- 每个标签都是对应一个过滤器 比如anno对应的就是AnonymousFilter --> <constructor-arg> <value> ${adminPath}/sysindex.html = anon /static/** = anon <!-- 对应某个链接需要某个权限 取消这种url使用AOP注解 ${adminPath}/queryArea.do = perms[items:query] --> ${adminPath}/login = authc <!-- 请求这个地址直接退出并清除session --> ${adminPath}/logout = logout ${adminPath}/** = user </value> </constructor-arg> </bean>变成注解式
@RequiresPermissions("sys:menu:save") @RequestMapping(value = "save") public void save(Menu menu, Model model, HttpServletRequest request, HttpServletResponse response) throws UnsupportedEncodingException {
那么这个Permission是怎么进行设置的呢
答案在授权方法中
@Override protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) { //返回什么值是必须要和doGetAuthenticationInfo的第一个参数有关的 Principal principal = (Principal) getAvailablePrincipal(principals); // 获取当前已登录的用户 /* if (!PublicConstant.TRUE.equals(Global.getConfig("user.multiAccountLogin"))){ Collection<Session> sessions = cachingShiroSessionDao.getActiveSessions(true, principal, SysUtils.getSession()); if (sessions.size() > 0){ // 如果是登录进来的,则踢出已在线用户 if (SysUtils.getSubject().isAuthenticated()){ for (Session session : sessions){ cachingShiroSessionDao.delete(session); } } // 记住我进来的,并且当前用户已登录,则退出当前用户提示信息。 else{ SysUtils.getSubject().logout(); throw new AuthenticationException("msg:账号已在其它地方登录,请重新登录。"); } } }*/ try{ User user = userService.get(new User(principal.getLoginName())); if (user != null) { SimpleAuthorizationInfo info = new SimpleAuthorizationInfo(); //加入权限即可以在jsp和java类中调用 // List<Menu> list = SysUtils.getRoleMenu(); // for (Menu menu : list){ // if (StringUtils.isNotBlank(menu.getPermission())){ // // 添加基于Permission的权限信息 // for (String permission : StringUtils.split(menu.getPermission(),",")){ // info.addStringPermission(permission); // } // } // } // 添加用户权限 info.addStringPermission("user"); // 更新登录IP和时间 // iUserApi.updateUserLoginInfo(user); // 记录登录日志 // LogUtils.saveLog(Servlets.getRequest(), "系统登录"); return info; } }catch(Exception e){ logger.error("DEMO 报错-位置:[SystemAuthorizingRealm->doGetAuthorizationInfo]",e); } return null; }
info.addStringPermission(permission);这样就完成了对应
spring开启aop 两种配置方式
<!-- AOP式方法级权限检查 --> <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>
<!-- 开启aop,对类代理 --> <aop:config proxy-target-class="true"></aop:config> <!-- 开启shiro注解支持 --> <bean class=" org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor"> <property name="securityManager" ref="securityManager" /> </bean>
用一种即可
jsp标签
Jsp页面添加:
<%@ tagliburi="http://shiro.apache.org/tags" prefix="shiro" %>或者自定义shiro标签
标签名称 | 标签条件(均是显示标签内容) |
<shiro:authenticated> | 登录之后 |
<shiro:notAuthenticated> | 不在登录状态时 |
<shiro:guest> | 用户在没有RememberMe时 |
<shiro:user> | 用户在RememberMe时 |
<shiro:hasAnyRoles name="abc,123" > | 在有abc或者123角色时 |
<shiro:hasRole name="abc"> | 拥有角色abc |
<shiro:lacksRole name="abc"> | 没有角色abc |
<shiro:hasPermission name="abc"> | 拥有权限资源abc |
<shiro:lacksPermission name="abc"> | 没有abc权限资源 |
<shiro:principal> | 显示用户身份名称 |
注意:无论是jsp还是aop都会每次都调用realm进行访问数据库获取权限信息
相关文章推荐
- Spring学习之使用标签来标记资源(@Component、@Repository、 @Service和@Controller)以及使用方式(包含如何在jsp中使用)
- WEB开发的jsp例子标签库(jstl)的使用
- Ruby使用Monkey Patch猴子补丁方式进行程序开发的示例
- Android开发笔记-使用Volley开源库进行Http网络请求(POST方式)
- java安全框架-Shiro学习笔记(六)-url匹配方式+shiro标签使用+session会话机制
- 使用Myeclipse进行java web开发的三种Tomcat部署方式
- JSP开发中对jstl的引用方式(标签库引用)
- shiro jsp标签使用
- javaWeb 使用jsp开发 if 标签
- 【JSP开发】useBean标签与setProperty标签的使用
- 使用delphi+intraweb进行微信开发2—intraweb以.net方式发布(以asp.net mvc4模式部署)在IIS(.net虚拟主机)上
- 使用eclipse开发jsp,如何进行单步调试
- MDD:使用模型驱动开发方式进行快速开发(多图预警)
- 使用XFire进行web services开发有三种方式:
- 使用简单标签进行开发
- JSP开发中对jstl的引用方式(标签库引用)
- 使用JSTL开发jsp自定义标签开发---迭代标签
- Apache Shiro 整合Spring 进行权限验证 以及在Freemarker中使用shiro标签
- 使用JSTL开发jsp自定义标签开发
- JSP开发中对jstl的引用方式(标签库引用)