/* * Copyright (c) 2016 OBiBa. All rights reserved. * * This program and the accompanying materials * are made available under the terms of the GNU Public License v3.0. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package org.obiba.shiro.web.filter; import org.apache.shiro.SecurityUtils; import org.apache.shiro.authc.AuthenticationException; import org.apache.shiro.authc.AuthenticationToken; import org.apache.shiro.subject.Subject; import org.apache.shiro.util.ThreadContext; public abstract class AbstractAuthenticationExecutor implements AuthenticationExecutor { @Override public Subject login(AuthenticationToken token) throws AuthenticationException { return login(token, null); } @Override public Subject login(AuthenticationToken token, String sessionId) throws AuthenticationException { Subject subject = sessionId == null ? SecurityUtils.getSubject() : new Subject.Builder(SecurityUtils.getSecurityManager()).sessionId(sessionId).buildSubject(); if(!subject.isAuthenticated()) { subject.login(token); ThreadContext.bind(subject); ensureProfile(subject); } return subject.isAuthenticated() ? subject : null; } /** * Trigger some processing after the login evaluation. * * @param subject */ protected abstract void ensureProfile(Subject subject); }