我可以使用此设置完美地提供静态资源,但是我必须逐个文件地定义允许提供的文件。
我当前的用例是/resources/public/
目录中应该允许客户端访问的任何内容。
我尝试了一个仍然不允许访问所有公共资源/resources/public/**
和/public/**
的{{1}}和/resources/public/
。所以在我的http配置中,我开始定义允许的文件扩展名,但我不喜欢这种方法,因为我的webapp中有很多不同的扩展名。
我的问题是如何允许访问WebSecurityConfigurerAdapter
中的所有文件,而无需为每个文件扩展名定义蚂蚁匹配器,或者我只是小费?
Spring @Override
public void configure(WebSecurity web) throws Exception {
web
.ignoring()
.antMatchers("/resources/**");
}
@Override
protected void configure(HttpSecurity http) {
http
.authorizeRequests()
.authorizeRequests()
.antMatchers(
"/public/**",
"/.svg", "/.ico", "/.eot", "/.woff2",
"/.ttf", "/.woff", "/.html", "/.js",
"/.map", "/*.bundle.*",
"/index.html", "/", "/home", "/dashboard")
.permitAll()
.anyRequest().authenticated();
}
- 根据jmw5598的回答编辑。
@CrossOrigin(origins = "http://localhost:4200", maxAge = 3600)
@Controller
public class AngularWebAppController {
@GetMapping(value = "/{path:[^\\.]*}")
public String redirect() {
return "forward:/";
}
}
用于投放网络应用的控制器:
/resources
eclipse
答案 0 :(得分:2)
您想要请求分隔符资源或URL处理程序映射。这在春天很容易。
<强> Servelet的上下文强>
<!-- Handles HTTP GET requests for /resources/** by efficiently serving
up static resources in the ${webappRoot}/resources directory -->
<resources mapping="/resources/**" location="/resources/" />
和
<default-servlet-handler />
此标记允许将DispatcherServlet映射到&#34; /&#34; (从而 覆盖容器的默认Servlet的映射,同时 仍然允许静态资源请求由。处理 容器的默认Servlet [...]
也许你对这个春天的安全内容很有用。
<强> CustomWebSecurityConfigurerAdapter 强>
我们的HelloWebSecurityConfiguration示例演示了Spring Security Java配置可以为我们提供一些非常好的默认设置。我们来看看一些基本的定制。
@EnableWebSecurity
@Configuration
public class CustomWebSecurityConfigurerAdapter extends
WebSecurityConfigurerAdapter {
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) {
auth
.inMemoryAuthentication()
.withUser("user") // #1
.password("password")
.roles("USER")
.and()
.withUser("admin") // #2
.password("password")
.roles("ADMIN","USER");
}
@Override
public void configure(WebSecurity web) throws Exception {
web
.ignoring()
.antMatchers("/resources/**"); // #3
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeUrls()
.antMatchers("/signup","/about").permitAll() // #4
.antMatchers("/admin/**").hasRole("ADMIN") // #6
.anyRequest().authenticated() // 7
.and()
.formLogin() // #8
.loginUrl("/login") // #9
.permitAll(); // #5
}
}
假设我们调整AbstractAnnotationConfigDispatcherServletInitializer以加载我们的新配置,我们的CustomWebSecurityConfigurerAdapter将执行以下操作:
对于那些熟悉基于XML的配置的人,上面的配置与以下XML配置非常相似:
<http security="none" pattern="/resources/**"/>
<http use-expressions="true">
<intercept-url pattern="/logout" access="permitAll"/>
<intercept-url pattern="/login" access="permitAll"/>
<intercept-url pattern="/signup" access="permitAll"/>
<intercept-url pattern="/about" access="permitAll"/>
<intercept-url pattern="/**" access="hasRole('ROLE_USER')"/>
<logout
logout-success-url="/login?logout"
logout-url="/logout"
/>
<form-login
authentication-failure-url="/login?error"
login-page="/login"
login-processing-url="/login"
password-parameter="password"
username-parameter="username"
/>
</http>
<authentication-manager>
<authentication-provider>
<user-service>
<user name="user"
password="password"
authorities="ROLE_USER"/>
<user name="admin"
password="password"
authorities="ROLE_USER,ROLE_ADMIN"/>
</user-service>
</authentication-provider>
</authentication-manager>
与XML命名空间的相似性
在查看稍微复杂的示例之后,您可能会发现XML命名空间和Java配置之间存在一些相似之处。以下是一些更有用的要点: