เทคนิคที่กล่าวถึงจะไม่ได้ผลอีกต่อไป ดูเหมือนว่า Spring จะผ่านช่วงเวลาอันยาวนานในการป้องกันไม่ให้ผู้ใช้แทนที่ SecurityExpressionRoot
แก้ไข 11/19/14 ตั้งค่า Spring เพื่อใช้คำอธิบายประกอบความปลอดภัย:
<beans ... xmlns:sec="http://www.springframework.org/schema/security" ... >
...
<sec:global-method-security pre-post-annotations="enabled" />
สร้างถั่วดังนี้:
@Component("mySecurityService")
public class MySecurityService {
public boolean hasPermission(String key) {
return true;
}
}
จากนั้นทำสิ่งนี้ใน jsp ของคุณ:
<sec:authorize access="@mySecurityService.hasPermission('special')">
<input type="button" value="Special Button" />
</sec:authorize>
หรือใส่คำอธิบายประกอบวิธี:
@PreAuthorize("@mySecurityService.hasPermission('special')")
public void doSpecialStuff() { ... }
นอกจากนี้คุณสามารถใช้Spring Expression Languageใน@PreAuthorize
คำอธิบายประกอบของคุณเพื่อเข้าถึงการพิสูจน์ตัวตนปัจจุบันรวมทั้งอาร์กิวเมนต์ของวิธีการ
ตัวอย่างเช่น:
@Component("mySecurityService")
public class MySecurityService {
public boolean hasPermission(Authentication authentication, String foo) { ... }
}
จากนั้นอัปเดตของคุณ@PreAuthorize
ให้ตรงกับลายเซ็นวิธีใหม่:
@PreAuthorize("@mySecurityService.hasPermission(authentication, #foo)")
public void doSpecialStuff(String foo) { ... }