标签: interceptor

NHibernate:拦截器的意义返回值

我认为这是一个简单的问题,但我的谷歌搜索在这方面很弱.

关于生成的ID和级联,我遇到了以下链接中描述的问题:

https://www.hibernate.org/hib_docs/nhibernate/html/example-parentchild.html(向下)

我使用他们建议的拦截器方法修复它.一切似乎都在起作用,所以我很开心.

也就是说,我不知道返回值的重要性来自以下方法:

    public override bool OnLoad(object entity, object id, object[] state, string[] propertyNames, IType[] types)
    {
        if (entity is Persistent) ((Persistent)entity).OnLoad();
        return false;
    }

    public override bool OnSave(object entity, object id, object[] state, string[] propertyNames, IType[] types)
    {
        if (entity is Persistent) ((Persistent)entity).OnSave();
        return false;
    }
Run Code Online (Sandbox Code Playgroud)

在这两种情况下都会返回false.

当我谷歌关于NHibernate拦截器时,我看到了很多关于如何编写一个的例子.有些反而返回true(http://www.lostechies.com/blogs/rhouston/archive/2008/03/27/creating-a-timestamp-interceptor-in-nhibernate.aspx).我不知道这里的区别是什么.我的代码正在运行,但拦截器对我来说似乎很有用,所以我希望能有更好的理解.

nhibernate interceptor

7
推荐指数
1
解决办法
1905
查看次数

如何使用struts 2中不同包中定义的拦截器?

我已经定义了一个拦截器如下:

<package name="default" extends="struts-default" >
  <interceptors>
       <interceptor-stack name="myStack">
          <interceptor-ref name="timer"/>
          <interceptor-ref name="logger"/>
        <interceptor-ref name="defaultStack"/>
       </interceptor-stack>
  </interceptors>

 <default-interceptor-ref name="myStack"/>

</package>
Run Code Online (Sandbox Code Playgroud)

然后在另一个命名空间中使用myStack:

<package name="posts" namespace="/posts" extends="struts-default,json-default">

        <action  name="question/ask" class="someclass.QuestionAction">
            <interceptor-ref name="myStack"></interceptor-ref>
            <result name="success">/WEB-INF/jsp/post_question.jsp</result>
            <result name="input">/WEB-INF/jsp/post_question.jsp</result>
        </action>

    </package>
Run Code Online (Sandbox Code Playgroud)

这不起作用,因为在包帖中,它找不到名为myStack的拦截器堆栈.我怎么解决这个问题?

struts2 interceptor interceptorstack

7
推荐指数
1
解决办法
3894
查看次数

Java EE7的拦截器问题

我正在测试/切换到Java EE7(Glassfish 4),我遇到的一个问题是拦截器,每当我尝试运行项目时,我都会收到以下错误.

严重:加载应用程序时出现异常:CDI部署失败:WELD-001417文件中启用拦截器类com.xxxxxx.security.SecuredInterceptor:/home/xxxxxx/xxxxxx/target/xxxxxx/WEB-INF/beans.xml@7既不是注释@Interceptor也没有通过便携式扩展注册

我正在看CDI 1.1规范的1.3.6节,它看起来没什么变化,所以我做错了什么?

这是我正在使用的代码;

@InterceptorBinding
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE, ElementType.METHOD})
public @interface Secured {}
Run Code Online (Sandbox Code Playgroud)

 

@Secured
@Interceptor
public class SecuredInterceptor implements Serializable
{
    @AroundInvoke
    public Object interceptSecured(InvocationContext ic) throws Exception
    {
        // Do Stuff
    }
}
Run Code Online (Sandbox Code Playgroud)

 

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://xmlns.jcp.org/xml/ns/javaee"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd"
       bean-discovery-mode="annotated">
    <interceptors>
        <class>com.xxxxxx.security.SecuredInterceptor</class>
    </interceptors>
</beans>
Run Code Online (Sandbox Code Playgroud)

glassfish interceptor cdi java-ee-7

7
推荐指数
2
解决办法
2697
查看次数

没有mutators和访问器(setter/getters)的参数以及Struts 2中的参数拦截器

在下面的动作类中,我使用的是参数拦截器.

@Namespace("/admin_side")
@ResultPath("/WEB-INF/content")
@ParentPackage(value = "struts-default")
@InterceptorRefs(@InterceptorRef(value="store", params={"operationMode", "AUTOMATIC"}))
public final class TestAction extends ActionSupport implements Serializable, ValidationAware, Preparable
{
    private static final long serialVersionUID = 1L;

    private String param1;
    private String param2;

    //Getters and setters.

    public TestAction() {}

    @Action(value = "TestMessage",
        results = {
            @Result(name=ActionSupport.SUCCESS, type="redirectAction", params={"namespace", "/admin_side", "actionName", "Test"}),
            @Result(name = ActionSupport.INPUT, location = "Test.jsp")},
        interceptorRefs={
            @InterceptorRef(value="paramsPrepareParamsStack", params={"params.acceptParamNames", "param1, param2", "params.excludeParams", "extraParam", "validation.validateAnnotatedMethodOnly", "true"})
        })
    public String insert() {
        // Do something. Add or update a row to …
Run Code Online (Sandbox Code Playgroud)

jsp struts2 interceptor struts2-interceptors

7
推荐指数
1
解决办法
945
查看次数

拦截所有EF6 Linq查询

我有一个函数,我希望在DbContext上的每个执行的Linq查询上运行,以在执行之前修改表达式树.我一直在看IDbCommandTreeInterceptor接口,但似乎没有提供一个表达式树(我认为这是可以理解的,因为它到达这一点时可能不是Linq查询).

有没有办法可以在执行前拦截和修改所有表达式?

NB.这必须是Linq树修改,因为我已经构建了一个修改Linq树的框架,最初用于Linq到SQL.

linq expression-trees interceptor entity-framework-6

7
推荐指数
1
解决办法
1684
查看次数

Hibernate Interceptor onFlushDirty使用相同的值多次调用

我的HibernateInterceptor出了问题.我扩展EmptyInterceptor并覆盖onFlushDirty方法.我使用此方法手动检查脏值(将先前值与当前值进行比较)以编写已更改实体的审计日志.问题是,在某些特定情况下,在调用方法onFlushDirty之前,相同的实体会多次传递给方法postFlush.之前的值和当前值不会因呼叫而发生变化.所以我的审计日志写了几次相同的更改.如果我的实体的变化(例如从属性NEWIN_PROGRESS)这一变化传递两次或更多次的onFlushDirty.为什么会这样?这是一种奇怪的行为,在我看来并不是预期的.

拦截器的调用onFlushDirty是由auto-flushHibernate 的行为引起的.在会话期间执行查询时,它会刷新会话中的所有脏实体.我希望这对于一个脏实体只做一次,但似乎即使在刷新后该实体仍被标记为"脏".然后在会话中再次执行另一个查询 - 再次刷新实体.旧值和当前值与第一次刷新时相同.

我尝试用测试用例重现这个问题,但我无法挑起这样的多次刷新.我希望你在我调试整个Hibernate代码之前,Hibernate专家可以帮助我解决这个问题.

干杯,克里斯

hibernate interceptor

7
推荐指数
1
解决办法
3781
查看次数

组件已经注册后,Castle Windsor将拦截器与选择器一起使用

我有一个抽象的基类,它包含几个方法,其中一个我需要随时拦截.基类可以由用户定义的类继承,并在应用程序启动时向容器注册.如果用户尚未注册,则容器安装程序将自行注册一个.

这是问题 - 用户不必担心添加拦截器.容器应该自己添加它,无论注册组件的人和位置.

这就是我现在正在做的事情:

if(!container.Kernel.HasComponent(typeof(MyBaseComponent)))
    container.Register(Component.For<MyComponent>()
        .Interceptors(InterceptorReference
        .ForType<MyComponentMethodInterceptor>())
        .SelectedWith(new MyComponentMethodSelector()).AtIndex(1));
Run Code Online (Sandbox Code Playgroud)

MyComponentMethodSelector是一个简单的IInterceptorSelector,它检查methodname是否等于我需要拦截的那个(在这种情况下MyComponentMethodInterceptor会添加一个).

如您所见,它将检查组件是否已首先注册.

问题是 - 如果已经注册,我是否有办法添加拦截器?想到的最明显的选择是使用a IContributeComponentModelConstruction,但是在那时我将无法选择拦截器添加到的方法.还是有吗?

编辑:

我本来应该更具体一点.我只需要为特定方法添加拦截器.因此我为什么使用MyComponentMethodSelector.我知道IContributeComponentModel,我开始用它直到我意识到我无法添加方法选择器.

.net c# aop castle-windsor interceptor

7
推荐指数
1
解决办法
1696
查看次数

@AroundInvoke拦截器在@WebService类上被调用两次

摘要

@AroundInvoke如果拦截的方法是通过端点作为SOAP Web服务从应用程序外部调用的,则在类上调用拦截器两次. 如果从另一个bean 内部调用相同的方法,它只被调用一次(正如我所料).@WebService

截获的方法本身始终只调用一次!

问题1:我可以只拦截一次拦截器吗?

问题2:如果我不能,是否有可转移的(服务器独立的)方式来决定我在哪个拦截器中,那么我可以忽略多余的拦截器?

问题3:这种行为是否常见(并在某些文档中定义和描述),还是依赖于我的特定环境(JBoss EAP 6.4.0)?

观察:

  1. 这两个调用不在同一个拦截器链中.
  2. 它与拦截器类的实例不同.
  3. InvocationContext两个调用的实现类都不同.
  4. 这很有趣,的一个contextData,在InvocationContext沿着拦截器链传递数据的字段中,是不是的一个实例HashMap,但是WrappedMessageContext,却没有换其他的contextData呢.

最小的可重现代码

(我删除了包名.)

MyEndpoint界面

import javax.jws.WebService;

@WebService
public interface MyEndpoint {
    public static final String SERVICE_NAME = "MyEndpointService";
    public String getHello();
}
Run Code Online (Sandbox Code Playgroud)

MyEndpointImpl类

import javax.interceptor.Interceptors;
import javax.jws.WebService;

@WebService(endpointInterface = "MyEndpoint", serviceName = MyEndpoint.SERVICE_NAME)
@Interceptors({TestInterceptor.class})
public class MyEndpointImpl implements …
Run Code Online (Sandbox Code Playgroud)

java aop web-services java-ee interceptor

7
推荐指数
1
解决办法
1552
查看次数

改进2.0标头身份验证

private void setUpRestClient() {
       OkHttpClient client = new OkHttpClient();
       client.interceptors().add(new Interceptor() {
           @Override
           public Response intercept(Chain chain) throws IOException {
               Request original = chain.request();
               Request request = original.newBuilder()
                       .header("Accept", "application/pyur.v1")
                       .header("Authorization", new SharedPreferencesUtil(getBaseContext()).getToken())
                       .header("Content-Type", "application/json")
                       .method(original.method(),original.body())
                       .build();
               return chain.proceed(request);
           }
       });
       RestClient.getInstance().configureRestAdapter(this, getResources().getString(R.string.base_url),client);
   }

public void configureRestAdapter(final Context context, String baseUrl, OkHttpClient client) {
    Gson gson = new GsonBuilder()
            .setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES)
            .setDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")
            .excludeFieldsWithModifiers(Modifier.FINAL, Modifier.TRANSIENT, Modifier.STATIC)
            .create();
    Retrofit retrofit = new Retrofit.Builder()
            .baseUrl(baseUrl)
            .addConverterFactory(GsonConverterFactory.create(gson))
            .client(client)
            .build();
    service = retrofit.create(NetworkServiceInterface.class);
}
Run Code Online (Sandbox Code Playgroud)

这现在让我在Retrofit 2.0中失败了,最初我没有"授权"标题,并且它给了我未经授权的,这是可以理解的.但是现在我用我的身份验证令授权它并且它失败了.Retrofit …

interceptor http-headers retrofit2

7
推荐指数
3
解决办法
2万
查看次数

Angular 4.3&5:如何扩展HttpClient?

我没有在文档中找到如何扩展HttpClient或如何为我的一些HTTP请求指定不同的拦截器.在文档中,他们解释了如何设置拦截器,HTTP_INTERCEPTORS但每个HTTP请求都被截获.

我需要自定义HttpClient实现来设置细节标题,端点或响应拦截器(我不想使用Restangular,我更喜欢使用内置的角度HttpClient实现).

  • 我有一个带有特定端点和特定标头的oAuth API来设置我的api-key.
  • 我还有我的"资源"API需要特定的头(Authorization: Bearer...和API-KEY)和特定的响应拦截器来捕获所有HTTP 401响应.
  • 也许,我需要在没有任何拦截器的情况下调用一些外部API

我知道这可以使用Restangular,但我更喜欢使用HttpClient.这怎么可能 ?

我发现这篇文章但是,这Http不适用于HttpClient角度4.3 的新实现.

api httpclient interceptor angular

7
推荐指数
1
解决办法
2658
查看次数