拦截器实现权限校验
重点: 通过案例更熟练的掌握拦截器的配置及使用
·案例流程
·页面设计
·声明式数据校验器的应用
·拦截器实现权限校验
·编码过滤器的应用
》案例流程
注册 -> 数据校验 -> 登录 -> 权限校验 -> 显示内容
》页面设计
注册页面 (校验注册信息)
<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>
- 判断用户是否登录
- 已登录,继续执行
- 未登录,返回错误信息
- 判断用户是否具有指定权限
- 具有相应权限,可以访问对应的内容
- 无权限,返回错误信息
·拦截器的具体代码
//控制器处理请求之前执行
// 返回值为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;
}
}
}