java – 基于输入参数标准的Spring安全性authrorize

我有一个场景,我需要根据他的权限和传递的输入参数的组合授权用户.

这是当前的情况

public void bookTicket(String bookingType)
    {
    if (bookingType == "AIR"){
         bookAirTicket();
    }else{
         bookBusTicket();
    }
    }


@PreAuthorize("hasRole('BOOK_AIR')")
private void bookAirTicket(){
}

@PreAuthorize("hasRole('BOOK_BUS')")
private void bookBusTicket(){
}

我们可以有类似的东西吗?

@PreAuthorize(("hasRole('BOOK_AIR')" AND bookinType='AIR') OR ("hasRole('BOOK_BUS')"  AND bookinType='BUS'))
public void bookTicket(String bookingType)
    {
    if (bookingType == "AIR"){
         bookAirTicket();
    }else{
         bookBusTicket();
    }
    }

基本上我需要基于输入参数的授权

谢谢

解决方法:

是的你可以.参数可以作为Spring EL变量访问.实际上,参考手册给出了several examples which use method parameters.该类需要使用调试符号进行编译(通常就是这种情况).

请注意,注释值是单个表达式字符串:

"(hasRole('BOOK_AIR') and #bookinType == 'AIR') or (hasRole('BOOK_BUS') and #bookinType='BUS')"

实际上,使用复杂的表达式相当容易出错.你也可以使用更简单的表达式

"@accessChecker.check('book', #bookinType)"

其中accessChecker是应用程序上下文中的bean,其中“check”方法返回true或false,具体取决于是否允许提供的操作信息(您可以通过自己访问安全上下文来检查当前用户的角色 – 您会发现所讨论的内容)在其他地方SO).

您还可以考虑编写自己的AccessDecisionManager或AccessDecisionVoter并在其中插入功能,但这需要更多内部知识.

上一篇:php – 如何通过编写URL阻止用户直接访问我的html页面?


下一篇:限制文件下载php