org.obiba.shiro.realm.SudoRealm.java Source code

Java tutorial

Introduction

Here is the source code for org.obiba.shiro.realm.SudoRealm.java

Source

/*******************************************************************************
 * Copyright 2008(c) The OBiBa Consortium. 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.realm;

import java.io.Serializable;

import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.AuthenticationInfo;
import org.apache.shiro.authc.AuthenticationToken;
import org.apache.shiro.authc.SimpleAccount;
import org.apache.shiro.authc.credential.AllowAllCredentialsMatcher;
import org.apache.shiro.authz.AuthorizationInfo;
import org.apache.shiro.authz.SimpleAuthorizationInfo;
import org.apache.shiro.realm.AuthorizingRealm;
import org.apache.shiro.subject.PrincipalCollection;
import org.obiba.shiro.authc.SudoAuthToken;
import org.springframework.stereotype.Component;

@Component
public class SudoRealm extends AuthorizingRealm {

    private final AuthenticationInfo simpleAccount = new SimpleAccount(SudoPrincipal.INSTANCE, null, getName());

    public SudoRealm() {
        setCredentialsMatcher(new AllowAllCredentialsMatcher());
    }

    @Override
    public boolean supports(AuthenticationToken token) {
        return token instanceof SudoAuthToken;
    }

    @Override
    protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
        // SudoAuthToken sudoToken = (SudoAuthToken) token;
        // TODO: test some kind of permission to conditionally accept the sudo request:
        // SecurityUtils.getSecurityManager().isPermitted(sudoToken.getSudoer(), "sudo")
        return simpleAccount;
    }

    @Override
    protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
        SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();
        if (principals.oneByType(SudoPrincipal.class) != null) {
            info.addStringPermission("*");
        }
        return info;
    }

    @SuppressWarnings({ "ClassMayBeInterface", "EmptyClass", "Singleton" })
    public static class SudoPrincipal implements Serializable {
        private static final long serialVersionUID = -5315801516710903139L;

        public static final SudoPrincipal INSTANCE = new SudoPrincipal();

        private SudoPrincipal() {
        }
    }
}