ROP支持和shiro整合,首先写一个继承FormAuthenticationFilter的子类,添加一个
public AuthenticationToken createToken(ServletRequest request){
return createToken(request, null);
}
方法,在rop框架的用户登录方法的类中注入上面定义的继承FormAuthenticationFilter的子类对象,在登录方法中使用以下代码
AuthenticationToken token = authenticatingFilter.createToken(request);
Subject subject = SecurityUtils.getSubject();
subject.login(token);
进行登录,注意登录方法的用户名密码的参数名要跟shiro的获取用户名、密码的参数名是一样。可通过一下代码将sessionId添加到ROP框架中
String sessionId = subject.getSession().getId().toString();
SessionManager sessionManager = context.getSessionManager();
sessionManager.addSession(sessionId, new SimpleSession());
继承DefaultWebSessionManager类,重写
protected Serializable getSessionId(ServletRequest request, ServletResponse response)
方法,使得shiro可以获取到ROP框架的sessionId
还需要定义一个线程变量摆渡类
/**
* 线程摆渡重设Shiro框架的线程变量
*/
public class ShiroThreadFerry implements ThreadFerry {
private Subject subject;
@Override
public void doInSrcThread() {
subject = ThreadContext.getSubject();
}
@Override
public void doInDestThread() {
ThreadContext.bind(subject);
}
}