Sou*_*har 5 java security spring authorization spring-security
我有一个场景,我需要根据他的权限和传递的输入参数的组合授权用户.
这是当前的情况
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(){
}
Run Code Online (Sandbox Code Playgroud)
我们可以有类似的东西吗?
@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();
}
}
Run Code Online (Sandbox Code Playgroud)
基本上我需要基于输入参数的授权
谢谢
是的你可以.参数可以作为Spring EL变量访问.实际上,参考手册给出了几个使用方法参数的例子.需要使用调试符号编译类(通常是这种情况).
请注意,注释值是单个表达式字符串:
"(hasRole('BOOK_AIR') and #bookinType == 'AIR') or (hasRole('BOOK_BUS') and #bookinType='BUS')"
Run Code Online (Sandbox Code Playgroud)
实际上,使用复杂的表达式相当容易出错.你也可以使用更简单的表达式
"@accessChecker.check('book', #bookinType)"
Run Code Online (Sandbox Code Playgroud)
accessChecker应用程序上下文中的bean在哪里使用"check"方法,该方法根据是否允许提供的操作信息返回true或false(您可以通过自己访问安全上下文来检查当前用户的角色 - 您会发现在其他地方讨论过在SO).
你也可以考虑编写自己的AccessDecisionManager或者AccessDecisionVoter插入那里的功能,但这需要更多的内部知识.
| 归档时间: |
|
| 查看次数: |
4817 次 |
| 最近记录: |