【发布时间】:2014-05-14 15:35:10
【问题描述】:
硬编码尝试使用 shiro 注销时遇到错误。 用户登录和注销不是通过 Web 登录/注销 url,而是通过后端链接。
登录后就可以了。
Subject currentUser = SecurityUtils.getSubject();
UsernamePasswordToken token = new UsernamePasswordToken(request.getParameter("username"), request.getParameter("password"));
token.setRememberMe(true);
try {
currentUser.login(token);
} catch (AuthenticationException e) {
e.printStackTrace();
}
但是当我尝试注销时,出现错误:
public void userLogout(String sessionId){
SecurityManager securityManager = SecurityUtils.getSecurityManager();
Subject.Builder builder = new Subject.Builder(securityManager);
builder.sessionId(sessionId);
Subject subject = builder.buildSubject();
if (null != subject) {
try {
subject.logout();
} catch (SessionException e) {
// TODO: handle exception
}
}
}
但遇到错误 [org.apache.shiro.session.UnknownSessionException: There is no session with id ,那么如何手动关闭 shiro 会话?
【问题讨论】:
-
我被用户currentUser.logout修复了,甚至不知道根本原因。
-
因为如果使用上述方法关闭当前会话,当前线程无法运行。