[Java]利用拦截器和自定义注解做登录以及权限验证
1.自定义注解
需要验证登录的注解
package com.etaofinance.wap.common; import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Documented
@Retention(RetentionPolicy.RUNTIME)//
@Target({ElementType.METHOD, ElementType.TYPE})//该注解修饰类中的方法
@Inherited
public @interface RequireLogin{
/**
* 登录验证注解
* 该注解可以标记Controller 或 Controller 中的方法.
* 如果Controller 有该标记,那么这个Controller下面所有的方法都会被过滤器
* 进行验证
* 如果Controller 没有有该标记,但Controller中的某个方法拥有该标记
* 那么这个方法将被过滤器验证(其他没有被标记的不会被验证)
*
* 特别注意,如果一个Controller 被标记RequireLogin 需要验证
* 但是其中某些方法不想被验证.请参见NoRequireLogin标记
*
* 茹化肖 2016年3月30日10:51:13
*/
}
不需要验证登录的注解
package com.etaofinance.wap.common; import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Documented
@Retention(RetentionPolicy.RUNTIME)//
@Target(ElementType.METHOD)//该注解修饰类中的方法
@Inherited
public @interface NoRequireLogin{
/**
* 不需要登录验证的方法注解注解
* 该注解在Controller 标记了 RequireLogin 特性时
* 某个方法不需要验证登录,那么为该方法标记该注解
* 茹化肖 2016年3月30日10:47:16
*/
}
拦截器实现
package com.etaofinance.wap.common; import java.io.OutputStream;
import java.lang.annotation.Annotation;
import java.lang.reflect.Method;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
import com.etaofinance.core.util.JsonUtil;
import com.etaofinance.core.util.PropertyUtils;
import com.etaofinance.entity.common.HttpResultModel;
/**
* 权限拦截器
* @author ofmyi_000
*
*/
public class AuthInteceptor extends HandlerInterceptorAdapter { public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
String basePath =PropertyUtils.getProperty("java.wap.url");
if (handler instanceof HandlerMethod) {
HandlerMethod myHandlerMethod = (HandlerMethod) handler;
Object bean = myHandlerMethod.getBean();
Method method= myHandlerMethod.getMethod();
Annotation classAnnotation = bean.getClass().getAnnotation(RequireLogin.class);//类上有该标记
Annotation methodAnnotation=method.getAnnotation(RequireLogin.class);//方法上有该标记
Annotation methodNologinAnnotation=method.getAnnotation(NoRequireLogin.class);//
if((classAnnotation!=null&&methodNologinAnnotation==null)
||(classAnnotation==null&&methodAnnotation!=null))
{
boolean isLogin = LoginUtil.checkIsLogin(request,response);
if(isLogin)
return true;
else{//未登录
if(isAjax(request)){
//Ajax请求返回JSON
HttpResultModel<Object> rep=new HttpResultModel<Object>();
rep.setCode(-1);
rep.setMsg("请登录后操作!");
String data = JsonUtil.obj2string(rep);
response.setHeader("content-type", "text/html;charset=UTF-8");
OutputStream out = response.getOutputStream();
out.write(data.getBytes("UTF-8"));
return false;
}
response.sendRedirect(basePath); }//IF LOGIN END
}//if Annotation end
}
return true;
}
private boolean isAjax(HttpServletRequest request){
String requestType = request.getHeader("X-Requested-With");
if (requestType != null && requestType.equals("XMLHttpRequest")) {
return true;
}
return false;
}
}
XML拦截器配置
...............
<mvc:interceptors>
<bean class="com.etaofinance.wap.common.GlobalLogInteceptor">
<property name="sourceSys" value="etaofinancewap"></property>
</bean>
<bean class="com.etaofinance.wap.common.AuthInteceptor" />
</mvc:interceptors>
.................
[Java]利用拦截器和自定义注解做登录以及权限验证的更多相关文章
- JavaEE权限管理系统的搭建(六)--------使用拦截器实现菜单URL的跳转权限验证和页面的三级菜单权限按钮显示
本小结讲解,点击菜单进行页面跳转,看下图,点击管理员列表后会被认证拦截器首先拦截,验证用户是否登录,如果登录就放行,紧接着会被权限验证拦截器再次拦截,拦截的时候,会根据URL地址上找到对应的方法,然后 ...
- SpringMVC拦截器+Spring自定义注解实现权限验证
特别提示:本人博客部分有参考网络其他博客,但均是本人亲手编写过并验证通过.如发现博客有错误,请及时提出以免误导其他人,谢谢!欢迎转载,但记得标明文章出处:http://www.cnblogs.com/ ...
- 拦截器和自定义注解@interface
1 .拦截器(Interceptor): 用于在某个方法被访问之前进行拦截,然后在Handler执行之前或之后加入某些操作,其实就是AOP的一种实现策略. 拦截用户的请求并进行相应的处理,比如:判断用 ...
- Spring MVC基础知识整理➣拦截器和自定义注解
概述 Spring MVC中通过注解来对方法或者类进行动态的说明或者标注,类似于配置标识文件的属性信息.当标注的类或者方式被使用时候,通过提取注解信息来达到对类的动态处理.在 MVC中,我们常用的注解 ...
- struts2拦截器加自定义注解实现权限控制
https://blog.csdn.net/paul342/article/details/51436565 今天结合Java的Annotation和Struts2进行注解拦截器权限控制. 功能需求: ...
- SpringBoot 拦截器和自定义注解判断请求是否合法
应用场景举例: 当不同身份的用户请求一个接口时,用来校验用户某些身份,这样可以对单个字段数据进行精确权限控制,具体看代码注释 自定义注解 /** * 对比请求的用户身份是否符合 * @author l ...
- 基于springboot通过自定义注解和AOP实现权限验证
一.移入依赖 <parent> <groupId>org.springframework.boot</groupId> <artifactId>spri ...
- Mybatis利用拦截器做统一分页
mybatis利用拦截器做统一分页 查询传递Page参数,或者传递继承Page的对象参数.拦截器查询记录之后,通过改造查询sql获取总记录数.赋值Page对象,返回. 示例项目:https://git ...
- java之拦截器Interceptor
1,拦截器的概念 java里的拦截器是动态拦截Action调用的对象,它提供了一种机制可以使开发者在一个Action执行的前后执行一段代码,也可以在一个Action执行前阻止其执行,同时也提供了 ...
随机推荐
- CodeIgniter连接数据库及快速入门
原文:CodeIgniter连接数据库及快速入门 一.数据库配置 CodeIgniter 有一个配置文件让你存放数据库连接值(username:用户名,password:密码,database nam ...
- Effective C++学习笔记(Part One:Item 1-4)
最近的最终effectvie C++仔细阅读侧,我很惊讶C++动力和魅力.最近的" LL最近记得阅读体验和读书笔记其.必要查找使用,是什么假设总结不合适.欢迎批评: 如今仅仅列出框架,近期会 ...
- open-flash-chart2各种效果
<pre class="html" name="code"><pre class="html" name="co ...
- freemarker定义自己的标签错误(一)
freemarker定义自己的标记 1.错误描写叙述 freemarker.core.ParseException: Token manager error: freemarker.core.Toke ...
- HBase写的初步测试中的表现
底 第四年HBase.在上线的机HBase集群做一个初步的测试写入性能.下面具体说明做测试内容. 说明 HBase周围环境 0.96版本号,8台region server.默认配置 写数据说明 单co ...
- mysql_【MySQL】常见的mysql 进程state
Analyzing 线程是对MyISAM 表的统计信息做分析(例如, ANALYZE TABLE ). checking permissions 线程是检查服务器是否具有所需的权限来执行该语句. Ch ...
- java_linux_shell_定时kill 启动java程序
#!/bin/bash #while truedo Process_ID=`ps -ef |grep 'LoginSinaWeiboCookie.jar' |grep -v grep |awk '{p ...
- BZOJ 1355 Baltic2009 Radio Transmission KMP算法
标题效果:给定一个字符串,求最小周期节(不能整除) 示例Hint这是错误的忽略了就好了 环路部分应该是cab 这个称号充分利用KMP在next自然阵列,那是,n-next[n]它表示一个循环节 POJ ...
- MVC使用Bootstrap
ASP.NET MVC使用Bootstrap系列(5)——创建ASP.NET MVC Bootstrap Helpers 摘要: 序言ASP.NET MVC允许开发者创建自定义的HTML Helper ...
- .NET Framework 各版本区别
.NET Framework 各版本区别 .NET Framework 1.1 自1.0版本以来的改进:自带了对mobile asp .net控件的支持.这在1.0版本是以附加功能方式实现的,现在已经 ...