在我的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方法时获取当前请求的页面?
答案 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属性作为公共最终变量公开