⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 passwordutility.java

📁 这个weblogging 设计得比较精巧
💻 JAVA
字号:
package org.roller.business.utils;import java.io.FileInputStream;import java.io.FileOutputStream;import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.util.Enumeration;import java.util.Properties;import org.roller.util.Utilities;/** * Roller password utility: don't run this unless you know what you are doing!</br > *  * <p>Configuration:<br /> *  * Program looks in current directory for db.properties file with database * connection properties driverClassName and connectionUrl.  *  * Program expects JDBC driver jar to be on classpath.</p> *  * <p>Usage:<br /> *  * java -cp ./WEB-INF/lib/rollerbeans.jar;./jdbc.jar org.roller.business.utils.PasswordUtility<br /> *  * <br />Options:<br /> *  * -save &lt;file-name&gt;: Save username/passwords in property file<br /> * -encrypt               : turn on encryption and encrypt passwords<br /> * -restore &lt;file-name>   : turn off encryption and restore passwords from file<br /> * -reset &lt;username&gt; &lt;password&gt;: reset users password<br /> * -grant_admin &lt;username&gt;<br /> * -revoke_admin &lt;username&gt;</p> */public class PasswordUtility {    public static void main(String[] args) throws Exception    {        Properties props = new Properties();        props.load(new FileInputStream("rollerdb.properties"));                String algorithm = props.getProperty("algorithm");                Connection con = ConsistencyCheck.createConnection(props,"");                if (args.length == 2 && args[0].equals("-save"))         {            savePasswords(con, args[1]);        }        else if (args.length == 1 && args[0].equals("-encrypt"))         {            encryptionOn(con, algorithm);        }        else if (args.length == 2 && args[0].equals("-restore"))         {            encryptionOff(con, args[1]);        }        else if (args.length == 3 && args[0].equals("-reset"))         {            resetPassword(con, args[1], args[2], algorithm);        }        else if (args.length == 2 && args[0].equals("-grant_admin"))         {            grantAdmin(con, args[1]);        }        else if (args.length == 2 && args[0].equals("-revoke_admin"))         {            revokeAdmin(con, args[1]);        }        else         {            System.out.println("");            System.out.println("USAGE: save passwords to a properties file");            System.out.println("   rollerpw -save <file-name>");            System.out.println("");            System.out.println("USAGE: turn ON password encryption and encrypt existing passwords");            System.out.println("   rollerpw -encrypt");            System.out.println("");            System.out.println("USAGE: turn OFF password encryption and restore saved passwords");            System.out.println("   rollerpw -restore <file-name>");            System.out.println("");            System.out.println("USAGE: reset a user password");            System.out.println("   rollerpw -password <username> <new-password>");            System.out.println("");            System.out.println("USAGE: grant admin rights to user");            System.out.println("   rollerpw -grant_admin <username>");            System.out.println("");            System.out.println("USAGE: revoke admin right from user");            System.out.println("   rollerpw -revoke_admin <username>");            System.out.println("");        }    }        /**      * Saves usernames and passwords to properties file, passwords keyed by usernames      */    private static void savePasswords(                    Connection con, String fileName) throws Exception    {        Properties newprops = new Properties();        PreparedStatement userquery = con.prepareStatement(           "select username,passphrase from rolleruser");        ResultSet users = userquery.executeQuery();        while (users.next())         {            String username = users.getString(1);            String passphrase = users.getString(2);            newprops.put(username, passphrase);        }        FileOutputStream fos = new FileOutputStream(fileName);        newprops.save(fos, "Generated by Roller Password Utility");        fos.close();    }    /**      * Encrypt all passwords in rolleruser and turn ON encryption flag in rollerconfig     */    private static void encryptionOn(                    Connection con, String algorithm) throws Exception    {        PreparedStatement userQuery = con        	.prepareStatement("select username,passphrase from rolleruser");        PreparedStatement userUpdate = con        	.prepareStatement("update rolleruser set passphrase=? where username=?");        PreparedStatement configUpdate = con			.prepareStatement("update rollerconfig set encryptpasswords=?");        Properties props = new Properties();        ResultSet users = userQuery.executeQuery();        while (users.next())        {            String username = users.getString(1);            String passphrase = users.getString(2);            props.put(username, passphrase);        }        Enumeration usernames = props.keys();        while (usernames.hasMoreElements())        {            String username = (String)usernames.nextElement();            String passphrase = (String)props.get(username);            userUpdate.clearParameters();            userUpdate.setString(1, Utilities.encodePassword(passphrase, algorithm));            userUpdate.setString(2, username);            userUpdate.executeUpdate();        }                configUpdate.setBoolean(1, true);        configUpdate.executeUpdate();    }    /**      * Restore passwords in rolleruser and turn OFF encryption flag in rollerconfig     */    private static void encryptionOff(                    Connection con, String fileName) throws Exception    {        PreparedStatement userUpdate = con			.prepareStatement("update rolleruser set passphrase=? where username=?");        PreparedStatement configUpdate = con			.prepareStatement("update rollerconfig set encryptpasswords=?");        Properties props = new Properties();        props.load(new FileInputStream(fileName));        Enumeration usernames = props.keys();        while (usernames.hasMoreElements())        {            String username = (String)usernames.nextElement();            String password = (String)props.get(username);            userUpdate.clearParameters();            userUpdate.setString(1, password);            userUpdate.setString(2, username);            userUpdate.executeUpdate();        }                configUpdate.setBoolean(1, false);        configUpdate.executeUpdate();    }    /**      * Reset user's password to specified value using specified algorythm (if needed)      */    private static void resetPassword(                    Connection con, String username, String password, String algorithm)     	    throws Exception    {		PreparedStatement encryptionQuery =             con.prepareStatement("select encryptpasswords from rollerconfig");		PreparedStatement userUpdate =             con.prepareStatement("update rolleruser set passphrase=? where username=?");				ResultSet rs = encryptionQuery.executeQuery();		rs.next();		boolean encryption = rs.getBoolean(1);				String newpassword = 		    encryption ? Utilities.encodePassword(password, algorithm) : password;		userUpdate.setString(1, newpassword);		userUpdate.setString(2, username);		userUpdate.executeUpdate();    }           /**     * Grant admin role to user by adding admin role for user to userrole table     */    private static void grantAdmin(Connection con, String userName) throws Exception    {        // Find userid of specified user        String userid = null;        PreparedStatement userQuery = con.prepareStatement(           "select id from rolleruser where username=?");            userQuery.setString(1, userName);        ResultSet userRS = userQuery.executeQuery();        if (!userRS.next())         {            System.err.println("ERROR: username not found in database");            return;        }        else         {            userid = userRS.getString(1);        }                // Is user already an admin?        PreparedStatement roleQuery = con.prepareStatement(           "select username from userrole where username=? and rolename='admin'");        roleQuery.setString(1, userName);        ResultSet roleRS = roleQuery.executeQuery();        if (!roleRS.next()) // then no, user is not admin        {            // Add admin role for user            PreparedStatement adminInsert = con.prepareStatement(               "insert into userrole (id,rolename,username,userid) values (?,?,?,?)");            adminInsert.setString(1, userName);            adminInsert.setString(2, "admin");            adminInsert.setString(3, userName);            adminInsert.setString(4, userid);            adminInsert.executeUpdate();            System.out.println("User granted admin role");        }        else         {            System.out.println("User was already an admin");        }    }    /**     * Revoke admin role from user by removing admin role from userrole table     */    private static void revokeAdmin(Connection con, String userName) throws Exception    {        // Find userid of specified user        String userid = null;        PreparedStatement userQuery = con.prepareStatement(           "select id from rolleruser where username=?");            userQuery.setString(1, userName);        ResultSet userRS = userQuery.executeQuery();        if (!userRS.next())         {            System.err.println("ERROR: username not found in database");            return;        }        else         {            userid = userRS.getString(1);        }                // Delete user's admin entries from userrole table        PreparedStatement roleDelete = con.prepareStatement(           "delete from userrole where userid=? and rolename='admin'");        roleDelete.setString(1, userid);        roleDelete.executeUpdate();    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -