【问题标题】:Check session value before controller declaration在控制器声明之前检查会话值
【发布时间】:2019-09-11 20:38:15
【问题描述】:

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

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

粗体和斜体的代码行不存在,它只是我为了解释我的想法而编造的。

解释示例代码:

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

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


}

【问题讨论】:

  • 这一切都取决于。您需要它用于多个控制器/方法还是仅在一个方法中。

标签: spring session


【解决方案1】:

使用Spring Security,您可以将@PreAuthorize 注释添加到执行逻辑的控制器* 类中,例如:

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

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

此外,Spring 支持方法安全(如上所述)以及 Web 安全。在 Web 安全中,身份验证+授权是在 HTTP(S) 端点上执行的,而不是在类/方法上。比较可以找到here

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多