标签: interceptor

在Web应用程序中何处以及如何使用拦截器?

我最近对拦截器概念感兴趣.我知道这个概念在许多库中使用,如NHibernate,Entity Framework等.但我对如何在ASP.NET MVC Web应用程序中使用此概念感兴趣.

在Mvc Web应用程序中使用它有用吗?

有没有使用拦截器的开源Asp.Net Mvc项目?

Asp.net Mvc已经支持一种带过滤器的控制器拦截器.最好使用过滤器而不是拦截器?

.net c# asp.net-mvc inversion-of-control interceptor

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

为什么我们需要Struts2中的Preparable接口?

我们有拦截器,我们有自定义拦截器,我们可以在执行操作之前或之后执行我们想要执行的所有操作.
那么有什么需要使用Preparable接口并实现它的准备方法呢?
这是另一种选择还是有一些特定目标可以做到这一点?

java model-view-controller struts2 java-ee interceptor

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

AngularJS Interceptor TypeError:无法读取未定义的属性"标题"

我在尝试实现AJAX Spinner加载代码时出于不明原因获取此错误.

我不明白应该在哪里定义标题.我做了,console.log(config)但我可以看到headers: accept: text/html那里的价值.

以下是我的代码:

/**
* Spinner Service
*/

//Spinner Constants
diary.constant('START_REQUEST','START_REQUEST');
diary.constant('END_REQUEST','END_REQUEST');

//Register the interceptor service
diary.factory('ajaxInterceptor', ['$injector','START_REQUEST', 'END_REQUEST', function ($injector, START_REQUEST, END_REQUEST) {
    var $http,
    $rootScope,
    myAjaxInterceptor = {
        request: function (config) {
            $http = $http || $injector.get('$http');
            if ($http.pendingRequests.length < 1) {
                console.log(config);
                $rootScope = $rootScope || $injector.get('$rootScope');
                $rootScope.$broadcast(START_REQUEST);
            }
        }
    };

    return myAjaxInterceptor;
}]);

diary.config(['$httpProvider', function ($httpProvider) {
    $httpProvider.interceptors.push('ajaxInterceptor');
}]);
Run Code Online (Sandbox Code Playgroud)

javascript interceptor angularjs

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

Java EE拦截器和@ViewScoped bean

我正在使用JBoss 7.1构建Java EE应用程序.

为了对用户操作进行全面审核,我计划使用Interceptor来记录我的bean方法的每次调用.

为此,我有以下招标:

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

然后我定义我的拦截器类:

@Logged
@Interceptor
public class UserActionInterceptor implements Serializable {

private static final long serialVersionUID = 1L;
private Logger log = LoggerFactory.getLogger(UserActionInterceptor.class);

public UserActionInterceptor() {
}

@AroundInvoke
public Object logMethodEntry(InvocationContext invocationContext) throws Exception {
    log.debug(invocationContext.getMethod().getName() + " invoked.");
    return invocationContext.proceed();
    }
}
Run Code Online (Sandbox Code Playgroud)

到目前为止,这工作正常.如果我使用这个拦截器绑定一个类,我会得到一些日志记录.但是,当我想要定位我的bean类时,它变得更加棘手.

如果我有一个@RequestScoped类型的bean并将其绑定到我的拦截器,它就可以工作.但是,如果我有一个@ViewScoped类型的bean,那么它不会.

我查了@ViewScoped的定义,发现:

@Retention(value=RUNTIME)
@Target(value=TYPE)
@Inherited
public @interface ViewScoped
Run Code Online (Sandbox Code Playgroud)

我觉得问题在于这个注释没有目标类型METHOD,它阻止我的拦截器拦截对类方法的调用.

以前有人有同样的问题吗?有人知道是否可以扩展bean的范围,以便可以截获其方法而不改变@ViewScoped的性质?

logging jboss java-ee interceptor

6
推荐指数
1
解决办法
1414
查看次数

如何在Spring Interceptor中使用@ExceptionHandler?

我正在使用springmvc为客户端创建restful api,我有一个用于检查accesstoken的拦截器.

public class AccessTokenInterceptor extends HandlerInterceptorAdapter
{    
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception
{
    if (handler instanceof HandlerMethod)
    {
        HandlerMethod handlerMethod = (HandlerMethod) handler;
        Authorize authorizeRequired = handlerMethod.getMethodAnnotation(Authorize.class);
        if (authorizeRequired != null)
        {
            String token = request.getHeader("accesstoken");
            ValidateToken(token);
        }
    }
    return true;
}

protected long ValidateToken(String token)
{
    AccessToken accessToken = TokenImpl.GetAccessToken(token);

    if (accessToken != null)
    {
        if (accessToken.getExpirationDate().compareTo(new Date()) > 0)
        {
            throw new TokenExpiredException();
        }
        return accessToken.getUserId();
    }
    else
    {
        throw new …
Run Code Online (Sandbox Code Playgroud)

java spring exception-handling interceptor

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

如何在 HandlerInterceptorAdapter 中添加 HttpServletRequest 标头?

我正在尝试在我的请求中添加一个 Authorization 标头,作为我们切换环境时的临时解决方法。我试图在扩展 HandlerInterceptorAdapter 的拦截器中处理它。

我使用了这里创建的 MutableHttpServletRequest 类,以便能够将标头添加到请求中,但似乎没有任何方法可以实际修改拦截器中返回的请求。有任何想法吗?

编辑:或者我必须在过滤器中执行此操作吗?

java spring interceptor http-headers

6
推荐指数
1
解决办法
8515
查看次数

拦截器没有被 SpringBoot 初始化和调用

我有一个 Spring-Boot 应用程序,它被打包为一个带有 tomcat 依赖项的战争(所以我有两个选项 - 使用打包的 .war 在通过 java -jar 命令启动后在嵌入式容器中运行,并且还可以运行一个独立的 servlet 容器)。

下面是我的 App 主类

package com.mycompany.edsa.dgv.proxysvc;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.support.SpringBootServletInitializer;
import org.springframework.context.annotation.Bean;
//import org.springframework.context.annotation.Import;
import org.springframework.context.annotation.ImportResource;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import  org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

import com.mycompany.edsa.dgv.proxysvc.interceptor.DGVProxySvcRequestInterceptor;

//import com.mycompany.edsa.dgv.proxysvc.config.ConfigExtension;

@SpringBootApplication
@ImportResource("classpath:dgv-proxy-svc-spring-ctx.xml")
//@Import(ConfigExtension.class)
public class DGVProxySvcAppMain extends SpringBootServletInitializer {

public static void main(String[] args) {
    SpringApplication.run(DGVProxySvcAppMain.class, args);
}

@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
    return application.sources(DGVProxySvcAppMain.class);
}

@Bean
public DGVProxySvcRequestInterceptor dgvProxySvcRequestInterceptor() {
    DGVProxySvcRequestInterceptor dgvProxySvcReqInterceptor = new DGVProxySvcRequestInterceptor();
    return dgvProxySvcReqInterceptor; …
Run Code Online (Sandbox Code Playgroud)

spring interceptor spring-boot

6
推荐指数
1
解决办法
1万
查看次数

如何在 Angular 4.3+ 中全局设置 { observe: 'response' } 选项?

第一个想法是使用 anHttpInterceptorclone(...)方法的签名不包含该observe选项。除了定义{ observe: 'response' }为每个请求的选择,我没有看到另一种尚未...

那么,是否有(如果有的话)全局设置{ observe: 'response' }选项的方法,例如通过?HttpInterceptor

clone(update: {
   headers?: HttpHeaders;
   reportProgress?: boolean;
   params?: HttpParams;
   responseType?: 'arraybuffer' | 'blob' | 'json' | 'text';
   withCredentials?: boolean;
   body?: T | null;
   method?: string;
   url?: string;
   setHeaders?: {
       [name: string]: string | string[];
   };
   setParams?: {
       [param: string]: string;
   };
}): HttpRequest<T>;
Run Code Online (Sandbox Code Playgroud)

response interceptor angular

6
推荐指数
1
解决办法
1608
查看次数

无法访问 Axios 拦截器中的 Vuex 存储突变

编辑:这个问题非常混乱,所以我基本上用相同的代码示例和相同的场景重写了它。


当从服务器响应发送 401 错误时,我试图.commit从拦截器到我的 vuex 存储:

import axios from 'axios';
import { store } from '../store/store';

export default function execute() {
    axios.interceptors.request.use(function(config) {
        const token = store.state.token;
        if(token) {
            config.headers.Authorization = `Bearer ${token}`;
            //console.log(config);
            return config;
        } else {
            return config;
        }
    }, function(err) {
        return Promise.reject(err);
    });
    axios.interceptors.response.use((response) => {
        return response;
    }, (err) => {
        console.log(err.response.status);
        if(err.response.status === 401) {
            this.$store.commit('logout');
        }
        console.log('err'); // this doesnt even console log
        return Promise.reject(err);
    });
}
Run Code Online (Sandbox Code Playgroud)

但它抛出错误

类型错误:无法读取未定义的属性“$store” …

javascript http interceptor axios vuex

6
推荐指数
1
解决办法
4158
查看次数

如何在 Spring Boot 3 和 Spring Framework 6 中注册拦截器

我正在使用 Spring Boot 构建后端3.1.0-SNAPSHOT,它使用Spring Framework 6x.

拦截器:

@Slf4j
public class MyInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        log.info("preHandle");
        return true;
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        log.info("afterCompletion");
    }
}
Run Code Online (Sandbox Code Playgroud)

在之前的版本(Spring Boot 2)中,添加Interceptor的方式是:

@Configuration
public class AppConfig implements WebMvcConfigurer {

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
     registry.addInterceptor( new MyInterceptor());
    }

}
Run Code Online (Sandbox Code Playgroud)

现在,添加此类配置类的正确方法是:

@Configuration
public class AppConfig {

    // Not …
Run Code Online (Sandbox Code Playgroud)

spring-mvc interceptor spring-boot

6
推荐指数
1
解决办法
8568
查看次数