SpringMVC注解实现登录验证
来源:互联网 发布:源码怎么使用 编辑:程序博客网 时间:2024/05/29 18:04
拦截器抽象类继承spring的HandlerInterceptorAdapter
package com.hsr.component.auth;import com.hsr.core.annotations.AuthAdmin;import org.springframework.web.method.HandlerMethod;import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;public abstract class AuthAdminInterceptorDefault extends HandlerInterceptorAdapter { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { //认证用户 if(handler == null || !handler.getClass().isAssignableFrom(HandlerMethod.class)){ return true; } HandlerMethod handlerMethod = (HandlerMethod) handler; Class beanType = handlerMethod.getBeanType(); AuthAdmin classLevelAuthAnnotation = null; AuthAdmin methodLevelAuthAnnotation = null; if(beanType != null){ classLevelAuthAnnotation = (AuthAdmin) beanType.getAnnotation(AuthAdmin.class); } methodLevelAuthAnnotation = handlerMethod.getMethodAnnotation(AuthAdmin.class); //先判断方法级别的限制 if(methodLevelAuthAnnotation != null){ if(methodLevelAuthAnnotation.validate() == false){ return true; } else{ return _validateUser(request, response); } } //如果方法级别没有注解在判断类级别的 if(classLevelAuthAnnotation != null){ if(classLevelAuthAnnotation.validate() == false){ return true; } else{ return _validateUser(request, response); } } return true; } private boolean _validateUser(HttpServletRequest request,HttpServletResponse response) throws IOException { //所有的请求都是要进行登陆认的 Object obj = ensureCurrentUser(request,response); if(obj == null){ //判断请求是否是ajax请求 String requestType = request.getHeader("X-Requested-With"); if(requestType != null && !"".equals(requestType.trim())){ if("XMLHttpRequest".toUpperCase().equals(requestType.toUpperCase())){ //getOutputStream与getWriter调用的问题 if(!response.isCommitted()) { response.reset(); } //告诉浏览器用UTF-8的编码格式 response.setHeader("Content-type", "application/html;charset=UTF-8"); //是告诉servlet用UTF-8转码 response.setCharacterEncoding("UTF-8"); response.getWriter().write("LOGIN_TIME_OUT"); } } else{ response.sendRedirect(ensureRedirectLoginUrl(request,response)); } return false; }else{ return true; } } protected abstract Object ensureCurrentUser(HttpServletRequest request,HttpServletResponse response); protected abstract String ensureRedirectLoginUrl(HttpServletRequest request,HttpServletResponse response);}
package com.edu.admin.base;import com.hsr.component.auth.AuthAdminInterceptorDefault;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class AdminAuth extends AuthAdminInterceptorDefault { @Override protected Object ensureCurrentUser(HttpServletRequest request, HttpServletResponse response) { return AdminUtil.getCurrentUser(); } @Override protected String ensureRedirectLoginUrl(HttpServletRequest request, HttpServletResponse response) { return "login"; }}注解代码
package com.hsr.core.annotations;import java.lang.annotation.*;/** 认证管理端用户 */@Documented@Inherited@Target({ElementType.METHOD, ElementType.TYPE})@Retention(RetentionPolicy.RUNTIME)public @interface AuthAdmin { boolean validate() default true;}springmvc的xml文件配置
<mvc:interceptors> <bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor"/> <mvc:interceptor> <mvc:mapping path="/admin/**"/> <bean class="com.edu.admin.base.AdminAuth"/> </mvc:interceptor></mvc:interceptors>然后在需要验证登录的controller上使用注解就行了
1 0
- SpringMVC注解实现登录验证
- SpringMVC使用注解实现登录
- SpringMVC 实现注解式权限验证
- SpringMVC实现注解式权限验证
- SpringMVC 实现注解式权限验证
- springmvc中使用aop实现登录验证
- springMVC使用kaptcha实现登录验证码
- SpringMVC拦截器实现登录验证
- springMvc自定义注解验证
- SpringMVC验证注解Validated
- springMVC登录验证码
- springmvc中的登录验证
- SpringMVC 学习系列 (9) 之 实现注解式权限验证
- SpringMVC学习之实现注解式权限验证
- SpringMVC的服务器验证二(注解方式实现)
- SpringMVC学习(9):实现注解式权限验证
- SpringMVC拦截器+Spring自定义注解实现权限验证
- SpringMVC+Spring+mybatis 实现登录过程(使用后台验证框架)
- mysql lower_case_table_names 参数引起的一起事故
- C# winform点击生成二维码
- oracle中merge into..using..on..when..when..用法
- 用枚举实现单例
- matlab写文件与导出数据(fprintf,dlmwrite,xlswrite)
- SpringMVC注解实现登录验证
- 插入排序法
- 第2章 关系模型介绍
- 北大ACM试题分类
- iOS 清除通知中心收到的APNS通知
- Kafka初识
- easyui 请求超时,如何重定向至登录页面
- cocos2D CCSprite 4
- 使用Eclipse Jetty插件运行web项目报无法加载WEB-INF/lib下的jar包的解决办法