Spring整合授权测试

发表时间:2018-03-20 10:02:06 浏览量( 7 ) 留言数( 0 )

学习目标:

1、了解Spring权限的使用


学习过程:

一、授权

    留意一下上一节课的一些配置,这里我们已经定义了可以使用AOP的方式

	<!-- 开启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>

    再看一下realm里面的User对象,已经由了对应角色和权限的了。这节课我们主要是


二、权限注解控制

   定义每一个Controller的方法需要的权限

@Controller
public class TestConroller {
	// 用户登陆提交
	@RequiresPermissions(value="user:list")
	@RequestMapping("/list")
	public String list(Model model, HttpServletRequest request) throws Exception {

		return "list";

	}
	
	@RequiresPermissions(value="user:other")
	@RequestMapping("/other")
	public String other(Model model, HttpServletRequest request) throws Exception {

		return "other";

	}
	
}



三、jsp标签控制

Jsp页面添加:

<%@ tagliburi="http://shiro.apache.org/tags" prefix="shiro" %>

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@ taglib prefix="shiro" uri="http://shiro.apache.org/tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<shiro:hasPermission name="user:create">添加</shiro:hasPermission>
<shiro:hasPermission name="user:delete">删除</shiro:hasPermission>
<shiro:hasPermission name="user:update">更新</shiro:hasPermission>

</body>
</html>

主页

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
	主页 ${user.userName }
	<a href="logout.do">退出</a>

	<br />
	<a href="list.do">list</a>
	<br />
	<a href="other.do">other</a>

</body>
</html>


其他的标签介绍

标签名称 标签条件(均是显示标签内容)

<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> 显示用户身份名称

<shiro:principal property="username"/>     显示用户身份中的属性值


四、权限异常

public class MyExceptionResolver implements HandlerExceptionResolver{  
	  
    public ModelAndView resolveException(HttpServletRequest request,  
            HttpServletResponse response, Object handler, Exception ex) {  
        // TODO Auto-generated method stub  
        System.out.println("==============异常开始=============");  
        //如果是shiro无权操作,因为shiro 在操作auno等一部分不进行转发至无权限url  
        ModelAndView mv=null;
        if(ex instanceof UnauthorizedException){  
             mv = new ModelAndView("refuse");  
        }else {
        	System.out.println("==============异常结束=============");  
             mv = new ModelAndView("error");  
        }
        ex.printStackTrace();
        
        mv.addObject("exception", ex.toString().replaceAll("\n", "<br/>"));  
        return mv;  
    }  
  
}

配置文件

   <bean id="exceptionResolver" class="com.shiro.MyExceptionResolver"></bean>  


好了。现在可以测试了。访问网站登陆

attcontent/d1eb9692-90db-4934-924e-a8b99a6e07c9.png

输入:liubao

      123


登陆成功后可以看到主页

attcontent/26dde132-417a-4a36-84ca-36d682ef7c78.png

list是由权限的。但是other是没有权限的。

点击list进入,只能看到有权限的两个按钮。

attcontent/7c5751d1-f1ce-4659-981b-919cdd9c42f7.png

返回主页,点击退出,就会重新进入登陆页面。并且销毁了注册信息