当前位置: 首页 > 知识库问答 >
问题:

使用Spring安全使 JSF 资源可公开访问

白浩荡
2023-03-14

我已经在我的jsf应用程序中实现了Spring Security性。除了静态资源需要认证之外,一切都很好。这是我的配置

@Override
protected void configure(HttpSecurity http) throws Exception {
    http.csrf().disable();

    http.authorizeRequests()
            .antMatchers("/register", "/resources/**").permitAll()
            .anyRequest().authenticated()
            .and().formLogin().loginPage("/login").permitAll()
           .usernameParameter("username").passwordParameter("password")
            .and().exceptionHandling().accessDeniedPage("/Access_Denied");
}

在做了一些谷歌搜索后,大多数解决方案是添加mvc资源标签。

  <mvc:resources mapping="/resources/**" location="/resources/"
    cache-period="31556926"/>

我发现了类似的注释,并为此添加了一个配置类

@Configuration
@EnableWebMvc
public class WebMvcConfig extends WebMvcConfigurerAdapter {

    // equivalents for <mvc:resources/> tags
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/resources/**").addResourceLocations("/resources/").setCachePeriod(31556926);
    }

    // equivalent for <mvc:default-servlet-handler/> tag
    @Override
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
        configurer.enable();
    }
}

但是静态资源仍然需要身份验证。一些关于如何使其工作的帮助会很好。

注意:我的资源放在/src/main/webapp/Resources/{css|js|image}中。问题是如果用户没有登录,css、js的效果不会显示在登录页面。用户登录一次后,登录后进入登录页面,出现css效果。

共有1个答案

姬阳曜
2023-03-14

JSF托管库资源从/javax.faces.resource/**路径提供。因此,您需要使该路径可公开访问:

@Override
protected void configure(HttpSecurity http) throws Exception {
    http.csrf().disable();

    http.authorizeRequests()
        .antMatchers("/register", "/javax.faces.resource/**").permitAll()
        .antMatchers("/**").authenticated()
        .and().formLogin().loginPage("/login").permitAll()
        .usernameParameter("username").passwordParameter("password")
        .and().exceptionHandling().accessDeniedPage("/Access_Denied");
}

您可能还希望浏览器缓存这些资源。然后,将此部分添加到您的配置中,这将为与 /javax.faces.resource/** 的请求匹配的每个响应添加一个标头编写器:

http.headers()
        .addHeaderWriter(new DelegatingRequestMatcherHeaderWriter(
                new AntPathRequestMatcher("/javax.faces.resource/**"),
                new HeaderWriter() {

                    @Override
                    public void writeHeaders(HttpServletRequest request,
                            HttpServletResponse response) {
                        response.addHeader("Cache-Control", "private, max-age=86400");
                    }
                }))
        .defaultsDisabled();

另请参见:

  • JSF资源库的用途是什么?应该如何使用它
 类似资料:
  • 问题内容: 我已经在我的jsf应用程序中实现了spring安全性。一切正常,除了静态资源需要身份验证。这是我的配置 经过一些谷歌搜索,大多数解决方案是添加MVC资源标签。 我发现了类似的注释,并为此添加了一个配置类 但是仍然静态资源需要身份验证。有关如何进行此工作的一些帮助将非常有用。 注意:我的资源位于中。问题是如果用户未登录,则css,js的效果不会显示在登录页面中。用户登录一次,登录后进入登

  • 主要内容:JSF可重定位资源示例JSF提供了将您的资源放置在网页的任何部分并将其呈现给另一部分的工具。您可以通过指定目标属性重新定位您的资源。 您可以将以下属性传递到目标属性中重新定位。 head:用于在头部渲染资源。 body:它用于在部分渲染资源, form:用于在表单部分呈现资源。 JSF可重定位资源示例 在下面的例子中,我们将JavaScript文件放在标签中,并将目标指定给部分。 文件:index.xhtml 中的代码

  • 我无法访问其他来源安全资源。搜索了几天的解决方案,但没有找到,所以我在这里发布问题。 而且起作用了。第二个应用程序将带有方法GET的HTTP请求发送到HTTP://localhost:8080/api/greetings,并得到带有Json数据的响应,报头为access-control-allow-origin:*。一切都很好. 但是. 然后我想在第一个应用程序中保护我的资源。在那里,我包含了sp

  • 我希望你能帮我做以下几件事: 我正在使用spring安全和spring MVC建立一个web应用程序,我需要重定向的流到登录页面,一旦有一个尝试访问一个禁止的资源(403 HTTP状态代码)。 现在,spring安全已经完成了防止未经授权访问我在Restful API(@RESTController)中公开的每一个资源的工作,并使用适当的403默认页面进行响应。但由于我需要重定向到登录页面,我需要

  • 我正在测试Spring Security中的登录方法。我想获得200的地位,但来了401。

  • 我正在尝试用KeyCloak配置我的Spring Security性。我用的是Spring靴。我的POM中有以下依赖项。 我使用的是spring boot版本1.5.7。和keycloak版本3.2.1.final以及我的应用程序中的以下属性。properties: 我没有其他配置。对于我的endpoint,我使用JAX-RS。为了请求我的令牌,我使用Chrome应用程序邮递员。以下是请求: 和我