在hasPermission表达式中传递HttpServletRequest

时间:2015-04-01 13:41:01

标签: java spring spring-security

在我的spring安全配置中,我有以下设置:

    @Override
      protected void configure(HttpSecurity http) throws Exception
      {
          http
        .authorizeRequests()  
            .antMatchers("/login.htm", "/signup.htm").permitAll()
            .antMatchers("/page1.htm", "/page2.htm", "/page3.htm").access("@permission.hasPermission(principal.username))
    ....
    }

包含方法hasPermission的@permission是一个@Component bean,它决定主用户名是否可以访问这些页面。在bean中我使用我的dao方法来确定这一点。但是,我需要更多的知识才能做出决定,因为它不是一个单一的页面。例如,有没有办法知道用户请求了哪个页面并在hasPermission方法中传递了该页面?换句话说,我想做类似的事情:

 .antMatchers("/page1.htm", "/page2.htm", "/page3.htm").access("@permission.hasPermission(principal.username, HttpServletRequest http))

请参阅方法的第二个参数。它是请求页面的http请求,因此我将知道用户是否请求了page1,page2或page3 .. 或者,如果我不能将其作为参数传递,我如何在执行hasPermission方法时获取当前请求的页面?

1 个答案:

答案 0 :(得分:1)

您应该可以使用以下方法访问它:

  @Override
  protected void configure(HttpSecurity http) throws Exception
  {
      http
        .authorizeRequests()  
            .antMatchers("/login.htm", "/signup.htm").permitAll()
            .antMatchers("/page1.htm", "/page2.htm", "/page3.htm").access("@permission.hasPermission(principal.username,request))
....
}

这是因为WebSecurityExpressionRoot.request属性作为公共最终变量公开