id.ac.idu.policy.PasswordEncoderImpl.java Source code

Java tutorial

Introduction

Here is the source code for id.ac.idu.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 id.ac.idu.policy;

import id.ac.idu.token.Md5Token;
import org.apache.commons.lang.StringUtils;
import org.springframework.dao.DataAccessException;
import org.springframework.security.authentication.encoding.PasswordEncoder;

import java.io.Serializable;

/**
 * @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!");
    }
}