如何在不丢失其他侦听器的情况下侦听变量或对象属性上设置的值。
例如
var myModel;
myModel = 10;
var myListener1 = function(oldVal, newVal) {
//do stuff
}
var myListener2 = function(oldVal, newVal) {
//do other stuff
}
Run Code Online (Sandbox Code Playgroud)
在这里,我希望每当为变量 myModel 设置值时调用 myListener1 和 myListener2。稍后在其他函数中可能还想在 setter 上向 myModel 添加另一个侦听器,因此它不应该覆盖现有侦听器。
我知道应该有一种方法可以使用 Object.defineProperty() 来做到这一点。另外,如果有一个针对 IE8+ 的跨浏览器解决方案就好了。
我想向拦截器添加身份验证逻辑。当服务被调用时,拦截器将进行身份验证。经过身份验证后,我想在请求中添加一个新标头,例如“header-user”:“john-doe”。但在拦截器中,我无法做到这一点,当我添加到 response.setHeader() 时,什么也没有发生。我想在实际的 REST 服务中使用这个新标头。
public class AuthInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
// Authenticate
// Add header
response.setHeader("header-user", "john-doe"); // not working
return true;
}
...
}
Run Code Online (Sandbox Code Playgroud)
如果我添加过滤器,过滤器会在拦截器之前被调用。
我在拦截器中读取请求正文时遇到问题。两者getReader()都会getInputStream()造成问题。我的拦截器:
public class MyInterceptor extends HandlerInterceptorAdapter {
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception exception)
throws Exception {
// TODO Auto-generated method stub
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView)
throws Exception {
// TODO Auto-generated method stub
}
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
String requestBody = httpRequest.getReader().lines().collect(Collectors.joining(System.lineSeparator()));
//or
// String requestBody = new BufferedReader(new InputStreamReader(httpRequest.getInputStream()))
// .lines().collect(Collectors.joining("\n"));
//some logic...
return …Run Code Online (Sandbox Code Playgroud) 使用 Spring Web 时,在这种情况下,对于其余端点和使用 Spring Boot 2,我可以通过实现WebMvcConfigurer接口为我的应用程序配置拦截器:
@Configuration
public class SpringWebConfig implements WebMvcConfigurer
{
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new MyInterceptor).addPathPatterns("/api/endpoint/**");
}
}
Run Code Online (Sandbox Code Playgroud)
我通过执行以下操作以自动方式将此拦截器添加到我的大多数应用程序中:
com.company.api。com.company.api到 api 扫描。这个 common 包还包含 Interceptor 和实用程序类来使这个拦截器工作,所以实际上,添加这个 common-jar 会自动将他的拦截器添加到应用程序中的所有操作中,这与 Spring 本身所做的概念类似:添加依赖项改变了 Spring 的默认配置。
我现在面临的问题是这种方法不能扩展到第二个 jar 中的第二个拦截器,因为我已经使用了 WebMvcConfigurer实现。我不能有两个。
我在考虑可能使用某种复合配置器模式,我们循环遍历每个配置器,收集所有拦截器,然后添加一次,但不幸的是 Spring 不允许这样做。我有哪些选择?
目前,我采用的方法是WebMvcConfigurer在每个需要它的应用程序中复制界面。当事情发生变化时,我感到很难过,我必须在每个应用程序中更改相同的代码片段。
我试图在处理 rpc 服务器调用后使用响应中的值设置一些元数据。计划是使用服务器拦截器和覆盖close方法。
像这样:https : //github.com/dconnelly/grpc-error-example/blob/master/src/main/java/example/Errors.java#L38
由于元数据值取决于响应,我需要某种方式将数据从 rpc 服务器调用传递到服务器拦截器或访问拦截器的响应
在 Golang 中,元数据可以grpc.SetTrailer在处理后的 rpc 调用中轻松设置,但在 java 中无法在 rpc 调用中进行设置。所以我试图使用服务器拦截器。
有人可以帮忙吗?
我有一个拦截器,负责验证请求标头中存在的安全令牌。但对于 Swagger,我不想验证那部分。所以我在拦截器的排除模式中添加了 URL,但它不起作用。以下是我的排除代码:
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new AuthorizationInterceptor()).addPathPatterns("/**")
.excludePathPatterns("/health*","/**/swagger-ui.html/**");
}
Run Code Online (Sandbox Code Playgroud)
但这不起作用,因为我从拦截器收到授权错误。这里出了什么问题?默认 Swagger URL 为:http://localhost:3000/swagger-ui.html
编辑:我看到 swagger-ui.html 页面存在于 springfox jar 的 META_INF/resources 文件夹中。所以我添加了以下内容,excludePathPatterns("/health*", "classpath:/META-INF/resources/**", "**/swagger-ui.html")但这也不起作用。
我正在尝试拦截来自 pytorch 库的 cudaMemcpy 调用以进行分析。我注意到 NVIDIA 在 CUDA 工具包示例中有一个 cuHook 示例。然而,该示例需要修改应用程序本身的源代码,在这种情况下我无法做到这一点。那么有没有一种方法可以在不修改应用程序源代码的情况下编写一个钩子来拦截CUDA调用呢?
我对过滤器和拦截器的了解是,作为 J2EE 规范的过滤器是 Web 服务器的一部分,而不是 Spring 框架的一部分。所以一些较旧的文章解释说,将过滤器注册为Spring Bean是不可能的,而Interceptor是可以的。但是我今天测试的结果是,Filters可以是Spring Bean,并且在Filters上注入Spring Bean也可以像Interceptor一样。(我在SpringBoot框架上测试过)
@Component
public class CustomFilterTest implements Filter {
@Override
public void doFilter(final ServletRequest request, final ServletResponse response, final FilterChain chain) throws ServletException, IOException {
chain.doFilter(request, response);
}
@Override
public void init(final FilterConfig filterConfig) throws ServletException {
Filter.super.init(filterConfig);
}
@Override
public void destroy() {
Filter.super.destroy();
}
}
Run Code Online (Sandbox Code Playgroud)
@RestController
@RequiredArgsConstructor
public class ProductController {
private final CustomFilterTest customFilterTest;
@GetMapping("/test")
public ResponseEntity<Void> temp() {
System.out.println(customFilterTest);
return ResponseEntity.noContent().build();
}
}
Run Code Online (Sandbox Code Playgroud)
谁能向我解释一下吗?
我有HttpInterceptor:
import {HttpErrorResponse, HttpEvent, HttpHandler, HttpInterceptor,
HttpRequest} from '@angular/common/http';
import {AuthService} from '../service/auth.service';
import {Observable} from 'rxjs/Observable';
import {Injectable} from '@angular/core';
import {Router} from '@angular/router';
@Injectable()
export class AuthInterceptor implements HttpInterceptor {
constructor(private authService: AuthService,
private router: Router) {
}
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
const clone = request.clone({headers: request.headers.set(AuthService.AUTH, this.authService.getToken())});
return next.handle(clone).catch(error => {
if (error instanceof HttpErrorResponse && error.status === 401) {
this.authService.clearToken();
this.router.navigate(['/auth/signin']);
return Observable.empty();
}
return Observable.throw(error);
});
}
}
Run Code Online (Sandbox Code Playgroud)
我想在if块中刷新令牌,但是当我 …
我们在没有任何许可的情况下实施了一些应用服 我们如何实现基于客户端IP地址的授权来执行方法?
例如,这是GetParsedData方法:
public GetParsedDataOutput GetParsedData(GetParsedDataInput input)
{
return _cacheManager.GetCache(nameof(GetData)).Get(input.ToString(), () => gpd(input)) as GetParsedDataOutput;
}
Run Code Online (Sandbox Code Playgroud)
我们如何通过IP地址检查用户权限?假设具有IP地址的客户端192.168.5.2被授予执行此方法的权限.
interceptor ×10
spring ×4
spring-boot ×4
java ×2
angular ×1
c# ×1
c++ ×1
cuda ×1
filter ×1
grpc ×1
grpc-java ×1
ip-address ×1
javascript ×1
listener ×1
prototype ×1
pytorch ×1
rest ×1
setter ×1
spring-mvc ×1
spring-web ×1