如何使用Spring Security保护文件夹中的所有页面?

时间:2017-12-01 21:00:31

标签: java spring security wicket

该应用程序有四个角色和四个包含页面的匹配文件夹。一个额外的文件夹包含多个角色共享的页面。目前,没有任何限制。测试人员发现,可以通过复制用于一个角色的书签并在使用其他角色登录时粘贴它来直接访问页面。

Spring Security的使用很少。有一个角色的枚举和数据库中的匹配表。用户可以拥有多个角色,在他们登录时选择一个角色。

我见过像这样的例子,它会进入spring-security.xml文件。

<http auto-config="true" use-expressions="true"> 
    <intercept-url pattern="/events/" access="hasRole('ROLE_ADMIN')"/> 
    <intercept-url pattern="/**" access="hasRole('ROLE_USER')"/> 
</http> 

我想像这样编码:

<http auto-config="true" use-expressions="true"> 
    <intercept-url pattern="/administrator/**" access="hasRole('ROLE_ADMINISTRATOR')"/> 
    <intercept-url pattern="/client/**" access="hasRole('ROLE_CLIENT')"/> 
</http> 

包含登录用户角色的代码定义为:

public class LMSSession extends WebSession

有没有办法用Wicket(7.9)实现这个?

2 个答案:

答案 0 :(得分:0)

如果使用Spring Security,通常会有一个Spring安全配置类

这是一个例如使用https://spring.io/blog/2013/07/03/spring-security-java-config-preview-web-security/

的链接

并检查CustomWebSecurityConfigurerAdapter和方法

部分
@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
  }

答案 1 :(得分:0)

您可以使用Spring Security的HttpSecurity(或其等效的XML)或Wicket的IAuthorizationStrategy来实现此目的。

您根据用户角色/client/page1/client/page2挂载页面,然后问题中的Spring Security代码段应该这样做(我更喜欢Java Config样式,所以我不是100%确定XML已完成!)。

但是如果您不想在网址中公开角色,那么使用wicket-auth-roles的@AuthorizeInstantiation也可以轻松完成。 wicket-examples有一个很好的demo关于它!