Сервер Jasper, использующий зашифрованный токен в javascript - PullRequest
0 голосов
/ 29 января 2020

Я использовал шифрование на основе токенов с помощью сервера Jasper. У меня вопрос, как я буду использовать это в своем javascript, особенно в iframe?

http://localhost:8080/jasperserver?pp=l4O3_onTsKh_vsBmfios-u72esQMepeawMD3QQkOE_ETDX1dvb3af4o5h4dXjpFyUOA2J5XrYSzreQ==

Выше зашифрованный токен.

Вот мой код java, который я скомпилировал. Затем jar добавлен в папку WEB-INF / lib.

package com.jaspersoft.cipher;

import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Arrays;
import java.util.Base64;

import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;

import com.jaspersoft.jasperserver.api.common.crypto.CipherI;

public class NewClass implements CipherI{


    private SecretKeySpec secretKey;
    private byte[] key;
    String myKey="Mehul Katara";

     public  void setKey(String myKey)
        {


         MessageDigest sha = null;
            try {
                key = myKey.getBytes("UTF-8");
                sha = MessageDigest.getInstance("SHA-1");
                key = sha.digest(key);
                key = Arrays.copyOf(key, 16);
                secretKey = new SecretKeySpec(key, "RC4");

            }
            catch (NoSuchAlgorithmException e) {
                e.printStackTrace();
            }
            catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }
        }

    public String decrypt(String strToDecrypt) {

        try {
            String secret=myKey;
            setKey(secret);
            Cipher cipher = Cipher.getInstance("RC4");
            cipher.init(Cipher.DECRYPT_MODE, secretKey);
            return new String(cipher.doFinal(Base64.getUrlDecoder().decode(strToDecrypt.getBytes("UTF-8"))));

        }
        catch(Exception e)
        {
            System.out.println("Error while decrypting !"  +e.toString());
            System.out.println("Error while descrypt GetMEssage()  : "  +e.getMessage());
            e.printStackTrace();
        } 
        return null;
    }

    public String encrypt(String strToEncrypt) {

        try {
            String secret=myKey;
            setKey(secret);
            Cipher cipher = Cipher.getInstance("RC4");
            cipher.init(Cipher.ENCRYPT_MODE, secretKey);

            return Base64.getUrlEncoder().encodeToString(cipher.doFinal(strToEncrypt.getBytes("UTF-8")));


        }
        catch(Exception e)
        {
            System.out.println("Error while encrypting"  +e.toString());
        }
        return null;

    }
}

Я также изменил xml

  <property name="tokenDecryptor">
        <!--<bean class="com.jaspersoft.jasperserver.api.common.crypto.DevelopmentPlainTextNonCipher"/>-->
        <bean class="com.jaspersoft.cipher.NewClass"/>
    </property>

Я сейчас очень запутался в том, как войти в систему с помощью токена , Если я go прямо на ссылку выше, он просто отправит меня на страницу входа. Документация не очень подробная об этом.

...