在ssh框架中,我想通过aop在用户进行某些操作时验证登陆。但是发现 在aop的动态代理中被代理对象(此例中为ReadJournalAction)的所以属性都为null.
即 还没有经过ognl为ReadJournalAction中的属性赋值就进入了aop代理。
请问这是什么原因?大家又是怎么做的呢?
package second.actions.journal;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Result;
import org.springframework.context.annotation.Scope;
import second.dao.madol.Journal;
@Action(value="readjournal",results={@Result(name="success",type="freemarker",location="/Pages/journal.ftl")})
@Scope("prototype")
public class ReadJournalAction extends JournalAction{
private int journalID;
private Journal journal;
@Override
public String execute() throws Exception {
journal=journalDAO.findJournal(journalID);
return SUCCESS;
}
public Journal getJournal() {
return journal;
}
public int getJournalID() {
return journalID;
}
public void setJournalID(int journalID) {
System.out.println("CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC");
this.journalID = journalID;
}
public void setJournal(Journal journal) {
this.journal = journal;
}
}
package second.actions.aop;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;
@Aspect
@Component
public class AopTest {
//@Pointcut("execution(* second.actions.journal.ReadJournalAction.execute(..))")
@Before("execution(* second.actions.journal.ReadJournalAction.*(..))")
public void dobefore(){
System.out.println("before login~~~~");
return;
}
@After("execution(* second.actions.journal.ReadJournalAction.*(..))")
public void doafter(){
System.out.println("after login~~~~~~~~~");
return;
}
}