org.surfnet.oaaas.auth.principal.AuthenticatedPrincipal.java Source code

Java tutorial

Introduction

Here is the source code for org.surfnet.oaaas.auth.principal.AuthenticatedPrincipal.java

Source

/*
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */
package org.surfnet.oaaas.auth.principal;

import org.codehaus.jackson.annotate.JsonAutoDetect;
import org.codehaus.jackson.annotate.JsonIgnore;
import org.codehaus.jackson.annotate.JsonMethod;
import org.codehaus.jackson.map.DeserializationConfig;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.map.annotate.JsonSerialize;
import org.springframework.util.CollectionUtils;

import java.io.IOException;
import java.io.Serializable;
import java.security.Principal;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;

/**
 * {@link Principal} that can contain roles and additional attributes. This is
 * the return Object for AbstractAuthenticator implementations.
 */
public class AuthenticatedPrincipal implements Serializable, Principal {

    private static final long serialVersionUID = 1L;

    @JsonIgnore
    private final static ObjectMapper mapper = new ObjectMapper()
            .enable(DeserializationConfig.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
            .enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL)
            .setSerializationInclusion(JsonSerialize.Inclusion.NON_NULL)
            .setVisibility(JsonMethod.FIELD, JsonAutoDetect.Visibility.ANY);

    private String name;

    private Collection<String> roles;

    private Collection<String> groups;

    private boolean adminPrincipal;

    /*
     * Extra attributes, depending on the authentication implementation. Note that we only support String - String attributes as we
     * need to be able to persist the Principal generically
     */
    private Map<String, String> attributes;

    public AuthenticatedPrincipal() {
        super();
    }

    public AuthenticatedPrincipal(String username) {
        this(username, new ArrayList<String>());
    }

    public AuthenticatedPrincipal(String username, Collection<String> roles) {
        this(username, roles, new HashMap<String, String>());
    }

    public AuthenticatedPrincipal(String username, Collection<String> roles, Map<String, String> attributes) {
        this(username, roles, attributes, new ArrayList<String>());
    }

    public AuthenticatedPrincipal(String username, Collection<String> roles, Map<String, String> attributes,
            Collection<String> groups) {
        this(username, roles, attributes, groups, false);
    }

    public AuthenticatedPrincipal(String username, Collection<String> roles, Map<String, String> attributes,
            Collection<String> groups, boolean adminPrincipal) {
        this.name = username;
        this.roles = roles;
        this.attributes = attributes;
        this.groups = groups;
        this.adminPrincipal = adminPrincipal;
    }

    /**
     * @return the roles
     */
    public Collection<String> getRoles() {
        return roles;
    }

    /**
     * @return the attributes
     */
    public Map<String, String> getAttributes() {
        return attributes;
    }

    /**
     * Get the given attribute.
     * @param key the attribute key to get.
     * @return String value if attribute found. Null if attribute not found or no attributes at all.
     */
    public String getAttribute(String key) {
        if (attributes == null) {
            return null;
        }
        return attributes.get(key);
    }

    public void addAttribute(String key, String value) {
        if (attributes == null) {
            attributes = new HashMap<String, String>();
        }
        attributes.put(key, value);
    }

    public void addGroup(String name) {
        if (groups == null) {
            groups = new ArrayList<String>();
        }
        groups.add(name);
    }

    /*
     * (non-Javadoc)
     * 
     * @see java.security.Principal#getName()
     */
    @Override
    public String getName() {
        return name;
    }

    @JsonIgnore
    public String getDisplayName() {
        return name;
    }

    /*
     * (non-Javadoc)
     * 
     * @see java.lang.Object#toString()
     */
    @Override
    public String toString() {
        return getClass().getName() + " [name=" + name + ", roles=" + roles + ", attributes=" + attributes + "]";
    }

    /**
     * @param name the name to set
     */
    public void setName(String name) {
        this.name = name;
    }

    /**
     * @param roles the roles to set
     */
    public void setRoles(Collection<String> roles) {
        this.roles = roles;
    }

    /**
     * @param attributes the attributes to set
     */
    public void setAttributes(Map<String, String> attributes) {
        this.attributes = attributes;
    }

    public Collection<String> getGroups() {
        return groups;
    }

    public void setGroups(Collection<String> groups) {
        this.groups = groups;
    }

    @JsonIgnore
    public boolean isGroupAware() {
        return !CollectionUtils.isEmpty(groups);
    }

    public boolean isAdminPrincipal() {
        return adminPrincipal;
    }

    public void setAdminPrincipal(boolean adminPrincipal) {
        this.adminPrincipal = adminPrincipal;
    }

    @JsonIgnore
    public String serialize() {
        try {
            return mapper.writeValueAsString(this);
        } catch (IOException e) {
            throw new RuntimeException("Unable to serialize Principal:" + toString(), e);
        }
    }

    @JsonIgnore
    public static AuthenticatedPrincipal deserialize(String json) {
        try {
            return mapper.readValue(json, AuthenticatedPrincipal.class);
        } catch (IOException e) {
            throw new RuntimeException("Unable to serialize Principal:" + json, e);
        }
    }

}