在控制器声明之前检查会话值

时间:2019-04-22 16:57:46

标签: spring session

Spring中是否有一种方法可以在访问控制器之前检查会话变量是否已设置并具有特定值?

除非设置了特定的会话变量,否则限制对整个控制器的访问的点。

不存在粗体和斜体代码行,它只是我用来解释我的想法的内容。

示例代码进行解释:

@Controller
***@SessionCheckValue(session.getAttribute("value")=="true" else redirect_to_some_page)***
public class MainController {

  public String index() {
    return "index";
  }


}

1 个答案:

答案 0 :(得分:0)

使用Spring Security,可以在执行逻辑的controller *类中添加@PreAuthorize批注,例如:

@PreAuthorize("@someBean.isUserVerified()")
// or
@PreAuthorize("#{T(com.package.someClass).someStaticAuthenticationMethod()}")

或者您可以使用AspectJ编写自己的AOP建议。如果您不介意将注释放在方法级别而不是类级别,则Spring AOP也是一种选择。尽管在编写自己的 security 实现时会保持谨慎。

此外,Spring同时支持方法安全性(如上所述)和Web安全性。在Web安全中,身份验证+授权是在HTTP(S)终结点而不是类/方法上执行的。可以进行比较here

*注意:Spring建议在服务层而不是控制器层上添加类/方法安全性,因为多个控制器可能引用同一服务。