拦截器 小练习

拦截器实现权限校验

重点: 通过案例更熟练的掌握拦截器的配置及使用

 

        ·案例流程

        ·页面设计

        ·声明式数据校验器的应用

        ·拦截器实现权限校验

        ·编码过滤器的应用

 

》案例流程

  注册 -> 数据校验 -> 登录 -> 权限校验 -> 显示内容

》页面设计

    注册页面     (校验注册信息)

<form:form commandName="user" action="${pageContext.request.contextPath }/user/doReg.do" method="post" modelAttribute="user">
		<font color="red"><form:errors path="*" /></font>
</form:form>

    登录页面  

    登录成功显示菜单页面以及不同的权限页面

 

》声明式数据校验器的应用

      ·提供数据校验对象

/**
 * 用户数据模型
 * @author Administrator
 *
 */
public class UserModel {
	@NotBlank(message="用户姓名不能为空")
	private String userName;
	
	@NotBlank(message="登录名不能为空")
	private String loginName;
	@Length(min=3,max=16,message="密码长度需大于三位小于16位")
	private String password;
	
//	用户角色,只允许选择,不允许输入
	private String userRole;
}

      ·配置文件  数据校验器

	<!-- 用户数据校验器 -->
	<bean id="userValidator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
		<!-- 提供数据校验的类 -->
		<property name="providerClass" value="org.hibernate.validator.HibernateValidator"></property>
	</bean>

 

》编码过滤器

      ·解决中文乱码

      ·在 web.xml 中添加配置

  <!-- 编码过滤器 -->
  <filter>
  		<filter-name>encode-utf8</filter-name>
  		<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
  		<!-- 制定编码格式 -->
  		<init-param>
  			<param-name>encoding</param-name>
  			<param-value>UTF-8</param-value>
  		</init-param>
  		<init-param>
  			<param-name>forceEncoding</param-name>
  			<param-value>true</param-value>
  		</init-param>
  </filter>
  <filter-mapping>
  	<filter-name>encode-utf8</filter-name>
  	<url-pattern>/*</url-pattern>
  </filter-mapping>

 

》拦截器实现权限校验

       ·配置文件

	<!-- 权限拦截器  -->
	<mvc:interceptors>
		<mvc:interceptor>
			<mvc:mapping path="/content/**"/>
			<bean class="com.kgc.interceptors.AuthInterceptor"></bean>
		</mvc:interceptor>
	</mvc:interceptors>
  • 判断用户是否登录
  1. 已登录,继续执行
  2. 未登录,返回错误信息
  • 判断用户是否具有指定权限
  1. 具有相应权限,可以访问对应的内容
  2. 无权限,返回错误信息

    ·拦截器的具体代码

	//控制器处理请求之前执行
//	返回值为false,截断执行   返回值为true,继续执行
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
			Object obj) throws Exception {
//		指定相应编码格式
		response.setContentType("text/html; charset=UTF-8");
		
//		1、判断用户是否登录,如已登录,继续执行,否则返回登录页面提示错误信息
		UserModel currentUser = (UserModel)request.getSession().getAttribute("user");
		if(null == currentUser){
//			用户没有登录,直接返回登录页面并且提示错误信息
			response.getWriter().print("<a href=\"http://http://localhost:8080/Interceptor_2/user/toLoginPage.do\" >请先登录</a>");
			return false;
		}else{
//			用户已登录
//			判断用户请求的访问路径是什么
			String requestURI = request.getRequestURI();
//			判断是否普通用户访问相应权限页面
			if(currentUser.getUserRole().equals("normal") && requestURI.contains("toNormal")){
				return true;
			}
//			判断是否高级会员用户访问相应权限页面
			else if(currentUser.getUserRole().equals("vip") && requestURI.contains("toVip")){
				return true;
			}
//			判断是否管理员访问相应权限页面		
			else if(currentUser.getUserRole().equals("admin") && requestURI.contains("toAdmin")){
				return true;
			}else{
//				提示错误信息
				response.getWriter().print("当前用户无权限访问该页面");
				return false;
			}
		}
	}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值