de.forsthaus.policy.PasswordEncoderImpl.java Source code

Java tutorial

Introduction

Here is the source code for de.forsthaus.policy.PasswordEncoderImpl.java

Source

/**
 * Copyright 2010 the original author or authors.
 * 
 * This file is part of Zksample2. http://zksample2.sourceforge.net/
 *
 * Zksample2 is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 * 
 * Zksample2 is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with Zksample2.  If not, see <http://www.gnu.org/licenses/gpl.html>.
 */
package de.forsthaus.policy;

import java.io.Serializable;

import org.apache.commons.lang.StringUtils;
import org.springframework.dao.DataAccessException;
import org.springframework.security.authentication.encoding.PasswordEncoder;

import de.daibutsu.token.Md5Token;

/**
 * @author bbruhns
 * 
 */
public class PasswordEncoderImpl implements PasswordEncoder, Serializable {

    private static final long serialVersionUID = 1L;

    public PasswordEncoderImpl() {
    }

    @Override
    public boolean isPasswordValid(String encPass, String rawPass, Object token) {
        /*
         * encPass -> Passwort aus UserDetais rawPass -> Passwort aus dem
         * Eingabefels token -> Ist null oder ein Md5Token und kommt aus
         * User.getToken()
         */

        if (encPass == null) {
            /*
             * Passwort auf der DB ist null Da null nicht im Webformular
             * eingegeben werden kann, wird ein false geliefert. (vergleich ist
             * nicht notwendig!)
             */
            return false;
        }

        if (token == null) {
            /*
             * Kein Token Verwenden. Einfach nur die Passwrter vergleichen.
             */
            return encPass.equals(rawPass);
        }

        /*
         * Ab hier wird ein Token verwendet! Wenn man in Debugger wartet, kann
         * der eingegebene Token Ablaufen!
         */

        if (rawPass.length() <= Md5Token.TOKEN_LENGTH) {
            /*
             * Passwort ist zu klein, um einen Token zu enthalten!
             */
            return false;
        }

        /*
         * Passwort ohne Token ermitteln
         */
        String newRawPass = StringUtils.left(rawPass, rawPass.length() - Md5Token.TOKEN_LENGTH);
        if (encPass.equals(newRawPass)) {
            /*
             * eingegebenes Token ermitteln
             */
            String rawToken = StringUtils.right(rawPass, Md5Token.TOKEN_LENGTH);
            Md5Token md5Token = (Md5Token) token;
            /*
             * Token prfen
             */
            return md5Token.isEqualsToken(rawToken);
        }
        return false;
    }

    @Override
    public String encodePassword(String rawPass, Object token) throws DataAccessException {
        throw new RuntimeException("Methode wird nicht untersttzt!");
    }
}