Java tutorial
/* * 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.apache.accumulo.core.client; import org.apache.accumulo.core.client.impl.thrift.SecurityErrorCode; import org.apache.accumulo.core.client.impl.thrift.ThriftSecurityException; import org.apache.commons.lang.StringUtils; /** * An Accumulo Exception for security violations, authentication failures, authorization failures, etc. * */ public class AccumuloSecurityException extends Exception { private static final long serialVersionUID = 1L; private static String getDefaultErrorMessage(final SecurityErrorCode errorcode) { switch (errorcode == null ? SecurityErrorCode.DEFAULT_SECURITY_ERROR : errorcode) { case BAD_CREDENTIALS: return "Username or Password is Invalid"; case CONNECTION_ERROR: return "Connection Error Occurred"; case PERMISSION_DENIED: return "User does not have permission to perform this action"; case USER_DOESNT_EXIST: return "The user does not exist"; case USER_EXISTS: return "The user exists"; case GRANT_INVALID: return "The GRANT permission cannot be granted or revoked"; case BAD_AUTHORIZATIONS: return "The user does not have the specified authorizations assigned"; case UNSUPPORTED_OPERATION: return "The configured security handler does not support this operation"; case INVALID_TOKEN: return "The configured authenticator does not accept this type of token"; case AUTHENTICATOR_FAILED: return "The configured authenticator failed for some reason"; case AUTHORIZOR_FAILED: return "The configured authorizor failed for some reason"; case PERMISSIONHANDLER_FAILED: return "The configured permission handler failed for some reason"; case TOKEN_EXPIRED: return "The supplied token expired, please update and try again"; case INSUFFICIENT_PROPERTIES: return "The login properties supplied are not sufficient for authentication. Please check the requested properties and try again"; case DEFAULT_SECURITY_ERROR: default: return "Unknown security exception"; } } private String user; private String tableInfo; private SecurityErrorCode errorCode; /** * @return this exception as a thrift exception */ public ThriftSecurityException asThriftException() { return new ThriftSecurityException(user, errorCode); } /** * Construct a user-facing exception from a serialized version. * * @param thrift * a serialized version */ public AccumuloSecurityException(final ThriftSecurityException thrift) { this(thrift.getUser(), thrift.getCode(), thrift); } /** * @param user * the relevant user for the security violation * @param errorcode * the specific reason for this exception * @param cause * the exception that caused this violation */ public AccumuloSecurityException(final String user, final SecurityErrorCode errorcode, final Throwable cause) { super(getDefaultErrorMessage(errorcode), cause); this.user = user; this.errorCode = errorcode == null ? SecurityErrorCode.DEFAULT_SECURITY_ERROR : errorcode; } /** * @param user * the relevant user for the security violation * @param errorcode * the specific reason for this exception * @param tableInfo * the relevant tableInfo for the security violation * @param cause * the exception that caused this violation */ public AccumuloSecurityException(final String user, final SecurityErrorCode errorcode, final String tableInfo, final Throwable cause) { super(getDefaultErrorMessage(errorcode), cause); this.user = user; this.errorCode = errorcode == null ? SecurityErrorCode.DEFAULT_SECURITY_ERROR : errorcode; this.tableInfo = tableInfo; } /** * @param user * the relevant user for the security violation * @param errorcode * the specific reason for this exception */ public AccumuloSecurityException(final String user, final SecurityErrorCode errorcode) { super(getDefaultErrorMessage(errorcode)); this.user = user; this.errorCode = errorcode == null ? SecurityErrorCode.DEFAULT_SECURITY_ERROR : errorcode; } /** * @param user * the relevant user for the security violation * @param errorcode * the specific reason for this exception * @param tableInfo * the relevant tableInfo for the security violation */ public AccumuloSecurityException(final String user, final SecurityErrorCode errorcode, final String tableInfo) { super(getDefaultErrorMessage(errorcode)); this.user = user; this.errorCode = errorcode == null ? SecurityErrorCode.DEFAULT_SECURITY_ERROR : errorcode; this.tableInfo = tableInfo; } /** * @return the relevant user for the security violation */ public String getUser() { return user; } public void setUser(String s) { this.user = s; } /** * @return the relevant tableInfo for the security violation */ public String getTableInfo() { return tableInfo; } public void setTableInfo(String tableInfo) { this.tableInfo = tableInfo; } /** * @return the specific reason for this exception * @since 1.5.0 */ public org.apache.accumulo.core.client.security.SecurityErrorCode getSecurityErrorCode() { return org.apache.accumulo.core.client.security.SecurityErrorCode.valueOf(errorCode.name()); } @Override public String getMessage() { StringBuilder message = new StringBuilder(); message.append("Error ").append(errorCode); message.append(" for user ").append(user); if (!StringUtils.isEmpty(tableInfo)) { message.append(" on table ").append(tableInfo); } message.append(" - ").append(super.getMessage()); return message.toString(); } }