webiou关联puttyy 把 127.0.0.1 劫持了,本地web怎么跑

dannyy1026 的BLOG
用户名:dannyy1026
文章数:196
评论数:321
访问量:564853
注册日期:
阅读量:5863
阅读量:12276
阅读量:370610
阅读量:1064965
[匿名]51cto游客:
[匿名]51cto游客:
51CTO推荐博文
在Spring框架中用AOP实现WEB服务的方法我们建立一个Interface包含所有的欲发布的方法,这里假设INTERFACE为ExampleWebService, 我们在该接口基础上派生出实现类ExampleWebServiceImpl,该实现类有一预配置的属性对象exampleWebServiceHandler, 所有ExampleWebService接口的方法在实现类的实现转为属性对象exampleWebServiceHandler相对应方法调用。这样做的好处是可以用Spring的AOP思想很简单地对接口参数添加校验,认证,修整数据等通用步骤。该属性对象bean指向的是一个自动代理bean,该bean加了拦截器来实现上述所需功能。所加拦截器所配置的advice属性为指向具体拦截算法的处理类bean。拦截处理类直接实现MethodBeforeAdvice, AfterReturningAdvice, ConstructorInterceptor, FieldInterceptor, MethodInterceptor接口的before(Method arg0, Object[] arg1, Object arg2), afterReturning(Object arg0, Method arg1, Object[] arg2, Object arg3), construct,get/set, invoke方法来实现在调用前,调用后,构造时,属性存取时,调用时加入具体拦截过程。以下是一个配置示例(WS的配置另文收录):
&bean id="applicationContext"class="org.apache.axis2.extensions.spring.receivers.ApplicationContextHolder" /&
&bean id="exampleWebService"class="com.mycompany.proj.api.service.ExampleWebServiceImpl"&&property name="exampleWebServiceHandler" ref="exampleWebServiceHandlerProxy"&&/property&&/bean&&bean id="apiFaultCheckingHandler"class="com.mycompany.proj.api.service.util.FaultCheckingHandlerImpl"&&property name="maxServiceThreadNumber" value="${api.maxconnections}"&&/property&&/bean&&bean id="apiCheckingAdvisor"class="org.springframework.aop.support.RegexpMethodPointcutAdvisor"&&property name="advice" ref="apiCheckingHandler"&&/property&&property name="pattern"&&value&.*&/value&&/property&&/bean&&bean id="apiCheckingBeforeAction" class="com.mycompany.proj.api.service.util.APICheckingBeforeAdvice"&&/bean&&bean id="apiCheckingBeforeActionAdvisor"class="org.springframework.aop.support.RegexpMethodPointcutAdvisor"&&property name="advice" ref="apiCheckingBeforeAction"&&/property&&property name="pattern"&&value&.*&/value&&/property&&/bean&&bean id="exampleWebServiceHandler" class="com.mycompany.proj.api.service.ExampleWebServiceHandler"&&/bean&&bean id="exampleWebServiceHandlerProxy" class="org.springframework.aop.framework.ProxyFactoryBean"&&property name="proxyInterfaces"&&value&com.webex.slim.api.service.IExampleWebService&/value&&/property&&property name="target" ref="exampleWebServiceHandler"&&/property&&property name="interceptorNames"&&list& &value&apiCheckingBeforeActionAdvisor&/value&&value&apiCheckingAdvisor&/value&&/list& &/property&&/bean&本文出自 “” 博客,请务必保留此出处
了这篇文章
类别:┆阅读(0)┆评论(0)46. Spring Boot中使用AOP统一处理Web请求日志 - Spring Boot,从零开始学Spring Boot,Spring Boot中使用AOP统一处理Web请求日志,Spring Boot实战 - language - ITeye论坛
46. Spring Boot中使用AOP统一处理Web请求日志
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
发表时间:&&
相关知识库:
在之前一系列的文章中都是提供了全部的代码,在之后的文章中就提供核心的代码进行讲解。有什么问题大家可以给我留言或者加我QQ,进行咨询。
AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是Spring框架中的一个重要内容,它通过对既有程序定义一个切入点,然后在其前后切入不同的执行内容,比如常见的有:打开数据库连接/关闭数据库连接、打开事务/关闭事务、记录日志等。基于AOP不会破坏原来程序逻辑,因此它可以很好的对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。
本文就是要通过AOP技术统一处理web请求的日志。
因为需要对web请求做切面来记录日志,所以先引入web模块,并创建一个简单的hello请求的处理。
&dependency&
&groupId&org.springframework.boot&/groupId&
&artifactId&spring-boot-starter-web&/artifactId&
&/dependency&
实现一个简单请求处理:
@RestController
publicclass HelloController {
@RequestMapping("/hello")
public String hello(String name,intstate){
return"name "+name+"---"+state;
这时候我们编写一个启动类启动运行程序访问:
就能看到页面返回的信息了,但是现在还是不能进行拦截的。
引入AOP依赖
&dependency&
&groupId&org.springframework.boot&/groupId&
&artifactId&spring-boot-starter-aop&/artifactId&
&/dependency&
在完成了引入AOP依赖包后,一般来说并不需要去做其他配置。也许在Spring中使用过注解配置方式的人会问是否需要在程序主类中增加@EnableAspectJAutoProxy来启用,实际并不需要。
可以看下面关于AOP的默认配置属性,其中spring.aop.auto属性默认是开启的,也就是说只要引入了AOP依赖后,默认已经增加了@EnableAspectJAutoProxy。
# AOP spring.aop.auto=true # Add @EnableAspectJAutoProxy.
spring.aop.proxy-target-class=false # Whether subclass-based (CGLIB) proxies are to be created (true) as opposed to standard Java interface-based proxies (false).
我在做测试的时候,以上两个配置我都没有进行使用,请自行进行测试。
而当我们需要使用CGLIB来实现AOP的时候,需要配置spring.aop.proxy-target-class=true,不然默认使用的是标准Java的实现。
实现Web层的日志切面
实现AOP的切面主要有以下几个要素:
使用@Aspect注解将一个java类定义为切面类
使用@Pointcut定义一个切入点,可以是一个规则表达式,比如下例中某个package下的所有函数,也可以是一个注解等。
根据需要在切入点不同位置的切入内容
使用@Before在切入点开始处切入内容
使用@After在切入点结尾处切入内容
使用@AfterReturning在切入点return内容之后切入内容(可以用来对处理返回值做一些加工处理)
使用@Around在切入点前后切入内容,并自己控制何时执行切入点自身的内容
使用@AfterThrowing用来处理当切入内容部分抛出异常之后的处理逻辑
package com.kfit.config.aop.
import java.util.A
import java.util.E
import javax.servlet.http.HttpServletR
import org.aspectj.lang.JoinP
import org.aspectj.lang.annotation.AfterR
import org.aspectj.lang.annotation.A
import org.aspectj.lang.annotation.B
import org.aspectj.lang.annotation.P
import org.slf4j.L
import org.slf4j.LoggerF
import org.springframework.core.annotation.O
import org.
import org.springframework.web.context.request.RequestContextH
import org.springframework.web.context.request.ServletRequestA
* 实现Web层的日志切面
* @author Angel(QQ:)
* @version v.0.1
@Component
@Order(-5)
publicclass WebLogAspect {
private Logger logger =
LoggerFactory.getLogger(this.getClass());
* 定义一个切入点.
* 解释下:
* ~ 第一个 * 代表任意修饰符及任意返回值.
* ~ 第二个 * 任意包名
* ~ 第三个 * 代表任意方法.
* ~ 第四个 * 定义在web包或者子包
* ~ 第五个 * 任意方法
* ~ .. 匹配任意数量的参数.
@Pointcut("execution(public * com.kfit.*.web..*.*(..))")
publicvoid webLog(){}
@Before("webLog()")
publicvoid doBefore(JoinPoint joinPoint){
// 接收到请求,记录请求内容
logger.info("WebLogAspect.doBefore()");
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
HttpServletRequest request = attributes.getRequest();
// 记录下请求内容
logger.info("URL : " + request.getRequestURL().toString());
logger.info("HTTP_METHOD : " + request.getMethod());
logger.info("IP : " + request.getRemoteAddr());
logger.info("CLASS_METHOD : " + joinPoint.getSignature().getDeclaringTypeName() + "." + joinPoint.getSignature().getName());
logger.info("ARGS : " + Arrays.toString(joinPoint.getArgs()));
//获取所有参数方法一:
Enumeration&String& enu=request.getParameterNames();
while(enu.hasMoreElements()){
String paraName=(String)enu.nextElement();
System.out.println(paraName+": "+request.getParameter(paraName));
@AfterReturning("webLog()")
publicvoid
doAfterReturning(JoinPoint joinPoint){
// 处理完请求,返回内容
logger.info("WebLogAspect.doAfterReturning()");
整个代码比较不好理解地方就是切点表达式,已经在注释中详细说明了,这里不再过多的介绍。编码中需要根据您自己的包命名规范进行修改下。
这时候运行程序访问
就可以看到控制台的打印信息了。
: WebLogAspect.doBefore()
: URL : http://127.0.0.1:8080/hello
: HTTP_METHOD : GET
: IP : 127.0.0.1
: CLASS_METHOD : com.kfit.demo.web.HelloController.hello
: ARGS : [林峰, 1]
name: 林峰
: WebLogAspect.doAfterReturning()
: 耗时(毫秒) : 1
优化:AOP切面中的同步问题
在WebLogAspect切面中,分别通过doBefore和doAfterReturning两个独立函数实现了切点头部和切点返回后执行的内容,若我们想统计请求的处理时间,就需要在doBefore处记录时间,并在doAfterReturning处通过当前时间与开始处记录的时间计算得到请求处理的消耗时间。
那么我们是否可以在WebLogAspect切面中定义一个成员变量来给doBefore和doAfterReturning一起访问呢?是否会有同步问题呢?
的确,直接在这里定义基本类型会有同步问题,所以我们可以引入ThreadLocal对象,像下面这样进行记录改造代码为如下:
package com.kfit.config.aop.
import java.util.A
import java.util.E
import javax.servlet.http.HttpServletR
import org.aspectj.lang.JoinP
import org.aspectj.lang.annotation.AfterR
import org.aspectj.lang.annotation.A
import org.aspectj.lang.annotation.B
import org.aspectj.lang.annotation.P
import org.slf4j.L
import org.slf4j.LoggerF
import org.
import org.springframework.web.context.request.RequestContextH
import org.springframework.web.context.request.ServletRequestA
* 实现Web层的日志切面
* @author Angel(QQ:)
* @version v.0.1
@Component
publicclass WebLogAspect {
private Logger logger =
LoggerFactory.getLogger(this.getClass());
ThreadLocal&Long& startTime = new ThreadLocal&Long&();
* 定义一个切入点.
* 解释下:
* ~ 第一个 * 代表任意修饰符及任意返回值.
* ~ 第二个 * 任意包名
* ~ 第三个 * 代表任意方法.
* ~ 第四个 * 定义在web包或者子包
* ~ 第五个 * 任意方法
* ~ .. 匹配任意数量的参数.
@Pointcut("execution(public * com.kfit.*.web..*.*(..))")
publicvoid webLog(){}
@Before("webLog()")
publicvoid doBefore(JoinPoint joinPoint){
startTime.set(System.currentTimeMillis());
// 接收到请求,记录请求内容
logger.info("WebLogAspect.doBefore()");
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
HttpServletRequest request = attributes.getRequest();
// 记录下请求内容
logger.info("URL : " + request.getRequestURL().toString());
logger.info("HTTP_METHOD : " + request.getMethod());
logger.info("IP : " + request.getRemoteAddr());
logger.info("CLASS_METHOD : " + joinPoint.getSignature().getDeclaringTypeName() + "." + joinPoint.getSignature().getName());
logger.info("ARGS : " lang
跳转论坛:移动开发技术
Web前端技术
Java企业应用
编程语言技术当前位置: →
→ 在Spring里写一个记录查询方法耗时的AOP如何写
在Spring里写一个记录查询方法耗时的AOP如何写
& 作者:佚名 & 来源: 互联网 & 热度:
&收藏到→_→:
摘要: 在Spring里写一个记录查询方法耗时的AOP怎么写?我做了一个SSH的集成,我想知道Hibernate执行的时候所耗的时间是多少? 比如说 &...
"在Spring里写一个记录查询方法耗时的AOP如何写"::
在spring里写一个记录查询方法耗时的aop怎么写?我做了一个ssh的集成,我想知道hibernate执行的时候所耗的时间是多少?
& 加载一个 &
& 实体对象 &
想在spring里面写这样一个aop.....
具体怎么实现?
在线等....!------解决方案--------------------/blog/225830
------解决方案--------------------可以写一个interceptor实现methodinterceptor来拦截你的dao嘛public object invoke(methodinvocation invocation) throws throwable{
invocation.proceed();
结束时间-开始时间就是你要的} 搜索此文相关文章:此文来自: 马开东博客
网址: 站长QQ
上一篇:没有了
在Spring里写一个记录查询方法耗时的AOP如何写_JavaWeb相关文章
JavaWeb_总排行榜
JavaWeb_最新
JavaWeb_月排行榜
JavaWeb_周排行榜
JavaWeb_日排行榜您所在位置: &
&nbsp&&nbsp&nbsp&&nbsp
基于AOP和WebServices的SOA应用研究.pdf4页
本文档一共被下载:
次 ,您可全文免费在线阅读后下载本文档。
文档加载中...广告还剩秒
需要金币:100 &&
基于AOP和WebServices的SOA应用研究.pdf
你可能关注的文档:
··········
··········
第27卷第2期 计算机应用与软件 Vo1.27No.2 2010年2月 ComputerApplicationsandSoftware Feb.2010 基于 AOP和 WebServices的SOA应用研究 孟凡新 刘光远 张京军 河北工程大学信息与电气sV_程学院 河北 邯郸 056038 河北工程大学科研处 河北 邯郸 056038 摘 要 WebServices是 目前解决Web环境下跨平台、跨语言、松耦合的分布式系统的最佳解决方案,但是作为SOA Service―Often―
tedArchitecture 应用的组成部分,WebServices中存在的一些横切关注点如授权、事务、安全性等降低了webServices的适应性和重用
性,构建的应用也难以维护和扩展。把面向方面的思想引入到webServices中,将它的横切关注点分离出来单独实现为AspeetualServ-
ices,并在应用运行时在SOAP SimpleObjectAccessProtoco1 消息层实现WebServices和AspectualServices的编织来解决上述问题。
关键词 WebServices SOA 横切关注点 面向方面编程 oN SoA-APPLICATIoNSBASED oN AoP AND W EB SERVICES MengFanxin LiuGuangyuan ZhangJingjun CollegeofInformationandElectricEngineering,HebeiUniversityofEngineering,Handan056038,Hebei,China 。 ScientificResearchOffice,HebeiUniversityofEngineering,Handan056038,Hebei,China Abstract
WebServiceisthebestmethodtoso]veCROSS―platform,cross―languageandlooselycoupleddistributedsystem inWebenviron―
mentatpresent,butbecauseofsomecrosscuttingconcernsinWebServicessuchasauthorization,trna saction,security,etc.,whicharethe
constituentsofSOA―applications。theadaptabilityandreuseofWebServicesarereduced.anditiSdifficulttomaintainna dextendtheSOA―
applicationwhichiscomposedofthem.Inthispaper,aspect―orientedprogrammingisintroducedtotheWebService,itscrosscuttingcon-
cernsareseparatedandrealisedindividuallyasAspectualServices,andtheproblemsaddressedabovearetobesolvedbyaWeaverweaving
WebservicesandAspectualServicesatSOAPmessagelayerwhentheapplicat
正在加载中,请稍后...

我要回帖

更多关于 webview 运营商劫持 的文章

 

随机推荐