हमारे पास इस तरह की स्थिति थी।
यहां दो समाधान हैं। मैं पसंद नहीं आया ज्यादा
@RequestMapping(value="/api/entry", method=RequestMethod.POST)
@ResponseBody
@PreAuthorize("#entry.author.name == principal.name)"
public Entry save(@Valid @RequestBody Entry entry, Principal principal) {
this.entryService.save(entry);
return entry;
}
या
@RequestMapping(value="/api/entry", method=RequestMethod.POST)
@ResponseBody
@PreAuthorize("Decision.isOK(entry, principal)")
public Entry save(@Valid @RequestBody Entry entry, Principal principal) {
this.entryService.save(entry);
return entry;
}
// उस मामले वसंत अपने स्थिर isOk() निर्णय वर्ग से विधि कॉल होगा। यह बूलियन वापस करना चाहिए।
स्प्रिंग इंजेक्ट्स प्रिंसिपल प्रिंसिपल अधिकृत विधि के लिए अधिकृत वस्तु है, आपको इसके बारे में चिंता करने की ज़रूरत नहीं है।
<security:global-method-security pre-post-annotations="enabled" />
दूसरा पहलू का उपयोग के साथ @PreAuthorize
एनोटेशन सक्षम करें। पहलू बनाएं
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Protector {
}
@Aspect
@Component
public class MyAspect {
@Before("@annotation(com.xyz.Protector)")
public void before(JoinPoint joinPoint) throws Throwable {
//u can get method object from joinPoint object,
Method method = ((MethodSignature)joinPoint.getMethodSignature()).getMethod();
//As long as you have Method object you can read the parameter objects (Entry and Principal) with reflection.
//So Compare here: If entry.getOwner().getId().equal(principal.getName()) blah blah blah
}
}
@RequestMapping(value="/api/entry", method=RequestMethod.POST)
@ResponseBody
@Protector
public Entry save(@Valid @RequestBody Entry entry, Principal principal) {
this.entryService.save(entry);
return entry;
}
आप पहलू है, तो आप और अधिक हो सकता है
क्रम
पर मालिक इसके अलावा इस
ulr
का उल्लेख 'साथ दोनों दृष्टिकोण मैं सबसे खुश था की कोशिश कर रहा @ PreAuthorize' के बाद। इस पर आने वाले किसी और के लिए, रेक बॉडी को सुरक्षित करना मेरे लिए कुछ जटिल था और मैं कुछ सेवाओं के साथ एक बीन को तार करने में सक्षम था। एक बीन उदाहरण बुलाते समय ईएल थोड़ा बदलता है। उदाहरण: '@PreAuthorize (" @ decision.isOK (# entry.blog.id, प्रिंसिपल) ")' –
मुझे खुशी है कि यह मदद की :) '@ PreAuthorize', इस उद्देश्य के लिए ठीक है, जबकि @Aspect अधिक सामान्य है हूँ:) – Elbek
@PreAuthorize में स्प्रिंग-ईएल से विधि पैरामीटर का जिक्र करना ''' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' @PreAuthorize ("Decision.isOK (#entry, #principal)") '' '' बजाय '' '' @PreAuthorize ("Decision.isOK (प्रवेश, प्रिंसिपल)") '' ''। –