के लिए ट्रिगर नहीं कर रहा है मैंने एक पहलू बनाया है जो यह सुनिश्चित करने के लिए मूल आईडी तुलना करता है कि उपयोगकर्ता एक ही समूह से संबंधित है जिसने इकाई को अनुरोध किया है। मैंने अपने पहलू को @Service विधियों से जोड़ने में सफलता प्राप्त की है, लेकिन यह सेवा परत पर समझ में नहीं आता है, और मुझे इसकी बजाय @RestController विधियों से जुड़ने की आवश्यकता है। जब मैं ऐसा करने का प्रयास करता हूं, सब कुछ अच्छा लगता है, लेकिन मेरा पहलू कभी ट्रिगर नहीं होता है, और लॉग चुप हैं।स्प्रिंग 4 एओपी @ आस्पेक्ट @RestController
pom.xml
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>4.1.7.RELEASE</version>
</dependency>
वसंत संदर्भ
<context:annotation-config/>
<context:component-scan base-package="my.pkg"/>
<aop:aspectj-autoproxy/>
<aop:config proxy-target-class="true"/>
पहलू
@Aspect
@Component
public class MyAspect {
@Pointcut("within(@org.springframework.stereotype.Controller *)")
public void controller() {}
@Pointcut("within(@org.springframework.web.bind.annotation.RestController *)")
public void restController() {}
@Pointcut("args(java.security.Principal,..)")
public void principalArgPointcut() {}
@Around("(controller() || restController()) && principalArgPointcut()")
public Object validate(ProceedingJoinPoint point) throws Throwable {
doValidationBefore();
Object result = point.proceed();
doValidationAfter();
return result;
}
}
जहां "doValidationBefore()" और "doValidationAfter()" एक अपवाद फेंक होगा सत्यापन विफल हो जाता है, तो ।
और अंत में, मेरी RestController
@RestController
@RequestMapping("/my-path")
public class MyController {
@RequestMapping(value = "/{entityId}", method = RequestMethod.GET)
public @ResponseBody
ResponseEntity<MyEntity> getEntityDetails(Principal principal, @PathVariable("entityId") Long entityId) {
return new ResponseEntity(HttpStatus.OK);
}
}
नोट करने के लिए कुछ बातें:
- यह सही पहलू काम करता है जब मैं निष्पादन पैटर्न सेवाओं से मेल खाते हैं और मेरी सेवा पैकेज में यह जगह करने के लिए बदल जाते हैं।
- पहलू और बाकी नियंत्रक एक ही संदर्भ में हैं
- मैं आईडीईए आईडीई का उपयोग करता हूं, और जब मैं पहलू पर "सलाह दी गई विधियों पर नेविगेट" आइकन का उपयोग करता हूं, तो जिस विधि का मैं परीक्षण कर रहा हूं वह विधियों की सूची में सूचीबद्ध है ।
- "की सलाह दी तरीकों पर नेविगेट" में सूचीबद्ध तरीकों में से कोई भी काम कर रहे हैं
बातें मैं कोशिश की है: org.aspectj: aspectjrt
- मैं अपने pom.xml करने के लिए 3 पुस्तकालयों कहा: 1.8.6, org.aspectj: aspectjtools: 1.8.6, cglib: cglib: 2.2.2। इनमें से कोई भी कोई फर्क नहीं पड़ता।
- मैंने अपने आस्पेक्ट और पॉइंटकूट को संदर्भ xml में सीधे परिभाषित करने और एनोटेशन को हटाने की कोशिश की, कोई फर्क नहीं पड़ता।
- मैंने सभी विधियों पर लागू करने के लिए अपना निष्पादन पैटर्न सेट करने का प्रयास किया है, और यह अभी भी ट्रिगर नहीं हुआ है।
- मैंने अपने RestController के लिए एक इंटरफ़ेस जोड़ने की कोशिश की, कोई बदलाव नहीं।
मुझे यहां कुछ मदद चाहिए, क्योंकि मैं इसे कुछ समय से हल करने की कोशिश कर रहा हूं। मुझे पता है कि यह संभव होना चाहिए।
एक ही समस्या का सामना करना और कारण नहीं मिल रहा है। कोई सुझाव जिस पर विन्यास जांचने के लिए? –
आपने मेरा दिन बचाया। मैंने आपकी पोस्ट पढ़ने तक निराश लेकिन बहुत निराश किया। आपका बहुत बहुत धन्यवाद – anhtuangv