我的应用程序只需要支持一个URL。喜欢http://.../service/api.要执行的操作取决于“操作”请求参数
为了处理这个问题,我创建了以下控制器
@RestController
public class Controller {
@PostMapping(path = "/api", params = "ACTION=INIT")
public String init() {
return "Inside Initialize";
}
@PostMapping(path = "/api", params = "ACTION=FETCH")
public String fetch() {
return "Inside Fetch";
}
@PostMapping(path="/view", param = "!ACTION")
public String view() {
return "Inside View";
}
缺少ACTION参数时将调用 /view。对于前两个请求,我配置了OAuth身份验证,后者即 /view将使用formlogin。
我已经创建了一个过滤器,在那里我检查ACTION参数,如果丢失,我将请求转发到 /view处理程序。
@Component
public class RouteFilter extends OncePerRequestFilter {
@Override
protected void doFilterInternal(HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse, FilterChain filterChain)
throws ServletException, IOException {
if(!StringUtils.hasText(httpServletRequest.getParameter("ACTION"))){
httpServletRequest.getRequestDispatcher("/view").forward(httpServletRequest,httpServletResponse);
}else {
filterChain.doFilter(httpServletRequest,httpServletResponse);
}
}
下面是过滤器注册。我已确保在FilterChainProxy之前调用了我的筛选器
@Autowired
private RouteFilter routeFilter;
@Bean
public FilterRegistrationBean<RouteFilter> filter() {
FilterRegistrationBean<RouteFilter> bean = new FilterRegistrationBean<>();
bean.setFilter(routeFilter);
bean.addUrlPatterns("/api");
bean.setOrder(-100);
return bean;
}
以下是安全配置
@Configuration
@Order(1)
public class Config extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/api")
.hasAuthority("SCOPE_API")
.anyRequest()
.authenticated()
.and()
.oauth2ResourceServer()
.opaqueToken();
}
}
@Configuration
@Order(2)
public class Config2 extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/view")
.permitAll()
.and()
.formLogin();
}
}
当我调用/服务/api时,RouteFilter将请求转发给/视图处理程序,但与/视图相关的Spring Security性没有得到尊重。Spring Security过滤器链是否不适用于转发的请求,或者我在这里遗漏了什么。我使用的是spring boot 2.4.0版本
如这里所述,我们需要将DispatcherType. FORWARD添加到springFilterChain以拦截转发的请求。上面链接中描述的步骤不起作用,因为springFilterChain是由SecurityAutoConfiguration创建的。要在此添加转发调度程序,我们需要将属性设置为application.yml
security:
filter:
dispatcher-types:
- request
- async
- error
- forward
设置此属性后,安全过滤器链会拦截请求。
我试图理解Hibernate过滤器,我认为即使查询不是从过滤的实体开始,也可以应用过滤器,如果我只是加入它。 我的实体: 过滤器通过拦截器启用,为了安全起见,从数据库中获取参数列表。 当我执行这样的查询时: 过滤器被应用了。但是我也希望当我的查询从模块部分开始时应用过滤器: 在上述查询中,没有应用筛选器。 ModuleSect实体中的学术类为null,但我也有其他实体不为空,其中上述情况不起作用。
主要内容:FilterChain 接口,Filter 链的拦截过程,Filter 链中 Filter 的执行顺序,示例在 Web 应用中,可以部署多个 Filter,若这些 Filter 都拦截同一目标资源,则它们就组成了一个 Filter 链(也称过滤器链)。过滤器链中的每个过滤器负责特定的操作和任务,客户端的请求在这些过滤器之间传递,直到传递给目标资源。 FilterChain 接口 javax.servlet 包中提供了一个 FilterChain 接口,该接口由容器实现。容器将其实例对象
我在使用带有“模式”标记器的“keep\u types”过滤器时遇到问题,下面是一个示例: 针对_analyze API的结果是: 如果我移除keep_types它按预期工作。 我还注意到,如果我使用“标准”分析器,它可以很好地工作,但在这种情况下,它不会以所需的方式标记文本。 我使用的是6.8版本,但在7.5版本中也尝试了相同的结果。。。 有什么想法吗?
我试图通过使用Micrsoft图形按名称获取SharePoint库。 以下查询返回两个库(更准确地说,是驱动器)的名称:https://graph.microsoft.com/v1.0/sites/SiteID/drives?$select=name, id 结果: 为了只返回一个名称,我做了这样的$filter https://graph.microsoft.com/v1.0/sites/Sit
问题内容: 据我了解,CSS过滤器应该可以在Chrome中的任何地方使用,但是我无法使它们适用于SVG元素。 在 所有 大多数浏览器中 都 可以正常工作: 但是,这在Chrome中不起作用: 这是一个例子: …这是一个小提琴:https : //jsfiddle.net/LtffLagn/2/ 问题答案: 所有归功于@Robert Longson,他给出了答案: CSS过滤器无法应用于Chrome