May 18, 2016 FineReport8.0 Product Update Log. We will introduce product’s version 8.0 of FineReport reporting tool in this article.This article includes five parts. (unless an odbc drive for 64-bit access is installed) and mac. Therefore, in V8.0, it is replaced into sqlite. 1.7 Support edit of rich text. A rich text editor is added in the designer.
Finereport9.0 crack version | finereport10.0 crack concurrency number | finereport authorized registration | FineBI5.0 crack lic
Finereport9.0 crack version | finereport10.0 crack concurrency number | finereport authorized registration | FineBI5.0 crack lic
Detailed decryption of the report execution process in the fine version of finereport9.0
In the report development tool FineReport, the execution process of the report can be roughly divided into two steps: 1. Report calculation; 2. Page conversion.
Report calculation process: first read our sql statement, pass the complete sql statement to the database server, return the data to the report server by the database, the report server performs data column expansion, summary, association, formula calculation, etc., and finally generate the report result.
Page conversion process: After the report calculation is completed, an xml page is generated, which needs to be converted into an html page to be viewed in the browser. Finereport10.0 cracked version, Finereport9.0 achieves unlimited concurrent authorization
For this process FineReport can be monitored in real time. The monitoring method is to set the log output level of the server to 'normal information', and you can see the time of each step on the console. Finereport8.0 crack version | FineReport crack version (free activation code) download
1. Set the log output level, FineReportr crack method
Change the log output level to 'Show general information', as set in the designer as shown below:
2. View the report execution process, finereport crack version download
Open the FR Designer and open the template that comes with it: %FR_HOME%WebReportWEB-INFreportletsgettingstarted.cpt
FineReport8.0 crack version | FineReport8.0 free activation version download
2.2 Clear the finereport9.0 cracked version of the log
Clear the log before clicking the page preview.
3. Browser access report
Click on the page preview, enter the parameter conditions, click on the query;
Finereport8.0 crack version | FineReport crack version (free activation code) download
After the report is fully displayed on the browser, view the information in the log window:
From the log we can monitor the execution of the report in real time.
When using the data set for identity authentication, the password exists in the database. When the password entered by the user is the same as the password in the database, the authentication is passed. If the database is cracked, the system is threatened. How to ensure the security of the system? The following introduces the RSA encryption algorithm through the report plugin FineReport.
Tools/materials
Report plugin FineReport7.1.1, FineReport8.0 crack version | FineReport8.0 free activation version download
Size: 148.2M Applicable platform: windows/linux
Method of operation
01
Load bcprov-jdk14-146.jar driver package The third-party package used by RSA encryption can be placed in the project web-inf/lib folder. If there is no driver, click the bcprov-jdk14-146.jar driver package to download. Note: The third-party encryption package used under the JBOSS server prompts an error: Can not parse the BC Provider. You need to move this package bcprov-jdk14-146.jar from the report project to the JBOSS default jar package path.
02
Call the js file RSA folder needs to call js file when encrypting front-end js, so you need to put Barrett.js, BigInt.js, RSA.js into the project directory, such as: WebReport/js, create new js The folder is placed in the js file. If you do not have this js file, you can click rsa/js to download it.
03
Define RSA encryption class Define the RSAUtil.java class file. First run the generateKeyPair() method in the class. A random RSAKey.txt file will be generated on the server D disk, and the public key and key will be saved. This method will refresh the txt file once. package com.fr.privilege; import java.io.ByteArrayOutputStream; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.math.BigInteger; import java.security.KeyFactory; import java.security.KeyPair; import java.security.KeyPairGenerator; import java.security.NoSuchAlgorithmException; import java.security.PrivateKey; import java.security.PublicKey; import java.security.SecureRandom; import java.security.interfaces.RSAPrivateKey; import java.security.interfaces.RSAPublicKey; import java.security.spec.InvalidKeySpecException; import java.security.spec.RSAPrivateKeySpec; import java.security.spec.RSAPublicKeySpec; import javax.crypto.Cipher; /** * RSA tool class. Provide encryption, decryption, and key pairing methods. * You need to download bcprov-jdk14-123.jar from http://www.bouncycastle.org. * */ public class RSAUtil { /** * * Generate key pair * * * @return KeyPair * * @throws EncryptException */ public static KeyPair generateKeyPair() throws Exception { try { KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance('RSA', new org.bouncycastle.jce.provider.BouncyCastleProvider()); final int KEY_SIZE = 1024;// There is nothing to say, this value is related to the size of the block encryption, can be changed, but not too big, otherwise the efficiency will be low keyPairGen.initialize(KEY_SIZE, new SecureRandom()); KeyPair keyPair = keyPairGen.generateKeyPair(); saveKeyPair(keyPair); return keyPair; } catch (Exception e) { throw new Exception(e.getMessage()); } } public static KeyPair getKeyPair() throws Exception { FileInputStream fis = new FileInputStream('C:/RSAKey.txt'); ObjectInputStream oos = new ObjectInputStream(fis); KeyPair kp = (KeyPair) oos.readObject(); oos.close(); fis.close(); return kp; } public static void saveKeyPair(KeyPair kp) throws Exception { FileOutputStream fos = new FileOutputStream('C:/RSAKey.txt'); ObjectOutputStream oos = new ObjectOutputStream(fos); // Generate a key oos.writeObject(kp); oos.close(); fos.close(); } /** * * Generate public key * * * @param modulus * * @param publicExponent * * @return RSAPublicKey * * @throws Exception */ public static RSAPublicKey generateRSAPublicKey(byte[] modulus, byte[] publicExponent) throws Exception { KeyFactory keyFac = null; try { keyFac = KeyFactory.getInstance('RSA', new org.bouncycastle.jce.provider.BouncyCastleProvider()); } catch (NoSuchAlgorithmException ex) { throw new Exception(ex.getMessage()); } RSAPublicKeySpec pubKeySpec = new RSAPublicKeySpec(new BigInteger( modulus), new BigInteger(publicExponent)); try { return (RSAPublicKey) keyFac.generatePublic(pubKeySpec); } catch (InvalidKeySpecException ex) { throw new Exception(ex.getMessage()); } } /** * * Generate private key * * * @param modulus * * @param privateExponent * * @return RSAPrivateKey * * @throws Exception */ public static RSAPrivateKey generateRSAPrivateKey(byte[] modulus, byte[] privateExponent) throws Exception { KeyFactory keyFac = null; try { keyFac = KeyFactory.getInstance('RSA', new org.bouncycastle.jce.provider.BouncyCastleProvider()); } catch (NoSuchAlgorithmException ex) { throw new Exception(ex.getMessage()); } RSAPrivateKeySpec priKeySpec = new RSAPrivateKeySpec(new BigInteger( modulus), new BigInteger(privateExponent)); try { return (RSAPrivateKey) keyFac.generatePrivate(priKeySpec); } catch (InvalidKeySpecException ex) { throw new Exception(ex.getMessage()); } } /** * * Encryption * * * @param key * Encrypted key * * @param data * Plaintext data to be encrypted * * @return Encrypted data * * @throws Exception */ public static byte[] encrypt(PublicKey pk, byte[] data) throws Exception { try { Cipher cipher = Cipher.getInstance('RSA', new org.bouncycastle.jce.provider.BouncyCastleProvider()); cipher.init(Cipher.ENCRYPT_MODE, pk); int blockSize = cipher.getBlockSize();// Get the encrypted block size, such as: 128 bytes before encryption, and key_size=1024 // The encryption block size is 127 // byte, 128 bytes after encryption; therefore there are 2 encrypted blocks, the first one is 127 // The second byte is 1 byte int outputSize = cipher.getOutputSize(data.length);// Get the block size after encrypting the block int leavedSize = data.length % blockSize; int blocksSize = leavedSize != 0 ? data.length / blockSize + 1 : data.length / blockSize; byte[] raw = new byte[outputSize * blocksSize]; int i = 0; while (data.length - i * blockSize > 0) { if (data.length - i * blockSize > blockSize) cipher.doFinal(data, i * blockSize, blockSize, raw, i * outputSize); else cipher.doFinal(data, i * blockSize, data.length - i * blockSize, raw, i * outputSize); // The doUpdate method is not available. After viewing the source code, it is found that there is no actual action after each doUpdate except that byte[] is placed. // ByteArrayOutputStream, and all the bytes[] are encrypted when the last doFinal, but by this time the encrypted block size is likely to have exceeded // OutputSize so I have to use the dofinal method. i++; } return raw; } catch (Exception e) { throw new Exception(e.getMessage()); } } /** * * Decrypt * * * @param key * Decrypted key * * @param raw * Encrypted data * * @return Clear text after decryption * * @throws Exception */ public static byte[] decrypt(PrivateKey pk, byte[] raw) throws Exception { try { Cipher cipher = Cipher.getInstance('RSA', new org.bouncycastle.jce.provider.BouncyCastleProvider()); cipher.init(cipher.DECRYPT_MODE, pk); int blockSize = cipher.getBlockSize(); ByteArrayOutputStream bout = new ByteArrayOutputStream(64); int j = 0; while (raw.length - j * blockSize > 0) { bout.write(cipher.doFinal(raw, j * blockSize, blockSize)); j++; } return bout.toByteArray(); } catch (Exception e) { throw new Exception(e.getMessage()); } } /** * * * * * @param args * * @throws Exception */ public static void main(String[] args) throws Exception { RSAPublicKey rsap = (RSAPublicKey) RSAUtil.generateKeyPair() .getPublic(); String test = 'hello world'; byte[] en_test = encrypt(getKeyPair().getPublic(), test.getBytes()); System.out.println('123:' + new String(en_test)); byte[] de_test = decrypt(getKeyPair().getPrivate(), en_test); System.out.println(new String(de_test)); } }
04
Define the TestPasswordValidatorRSA.java password verification class Define a class named TestPasswordValidatorRSA.java, extend it to AbstractPasswordValidator, rewrite the password verification method encodePassword, first flip the input password, then encrypt it, return the password for verification, The specific code is as follows: package com.fr.privilege; import com.fr.privilege.providers.dao.AbstractPasswordValidator; public class TestPasswordValidatorRSA extends AbstractPasswordValidator{ //@Override public String encodePassword( String clinetPassword) { try { //Flip the password as the input ab flips to be ba StringBuffer sb = new StringBuffer(); sb.append(new String(clinetPassword)); String bb = sb.reverse().toString(); //Encrypt byte[] en_test = RSAUtil.encrypt(RSAUtil.getKeyPair().getPublic(),bb.getBytes()); //Decrypt, if the password is saved in the database, there is no need to decrypt here. byte[] de_test = RSAUtil.decrypt(RSAUtil.getKeyPair().getPrivate(),en_test); //Return encrypted password clinetPassword=new String(de_test); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return clinetPassword; //Get the encrypted password and match the database password. } @Override public boolean validatePassword(String arg0, String arg1) { // TODO Auto-generated method stub return false; } }
05
Compile class file First compile the RSAUtil.java class file to generate the RSAKey.txt file on the server's D drive, compile the TestPasswordValidatorRSA.java class, and put the compiled class file into the project project web-inf/classes /com/fr/privilege folder.
06
Log in to the Login.jsp page setup The client requests a login page and randomly generates a string. This random string is used as the key to encrypt the password. The following code: <%@page contentType='text/html' pageEncoding='UTF-8'%> <%@page import='com.fr.privilege.providers.dao.RSAUtil'%> <%!public String Testmo() { String module = '; try { java.security.interfaces.RSAPublicKey rsap = (java.security.interfaces.RSAPublicKey) RSAUtil .getKeyPair().getPublic(); module = rsap.getModulus().toString(16); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return module; }%> <%!public String Testem() { String empoent = '; try { java.security.interfaces.RSAPublicKey rsap = (java.security.interfaces.RSAPublicKey) RSAUtil .getKeyPair().getPublic(); empoent = rsap.getPublicExponent().toString(16); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return empoent; }%> <html> <head> <script type='text/javascript' src='ReportServer?op=emb&resource=finereport.js'></script> <script type='text/javascript' src='js/RSA.js'></script> <script type='text/javascript' src='js/BigInt.js'></script> <script type='text/javascript' src='js/Barrett.js'></script> <script type='text/javascript'> function bodyRSA() { setMaxDigits(130); var a = '<%=Testmo()%>'; var b = '<%=Testem()%>'; key = new RSAKeyPair(b,',a); } function doSubmit() { bodyRSA(); var username = FR.cjkEncode(document.getElementById('username').value); //Get the username entered var password = FR.cjkEncode(document.getElementById('password').value); //Get the input parameters .ajax({ url : 'ReportServer?op=auth_login&fr_username=' + username + '&fr_password=' + password, //send the username and password to the report authentication address op=auth_login data : {__redirect__ : 'false'}, complete : function(res) { var jo = FR.jsonDecode(res.responseText); if(jo.url) { window.location=jo.url+ '&_=' + new Date().getTime(); //Authorization successfully jumps to the page because ajax does not support redirecting all that needs to be redirected. Setting } else{ alert('Username password is wrong!') //Authentication failed } } }) } </script> </head> <body> <p> Please login </p> <form name='login' method='POST'> <p> Username: <input type='text' /> </p> <p> password: <input type='password' /> </p> <input type='button' value='Login' /> </form> </body> </html>
07
Management platform settings Accessing the report triggers the encrypted file to be set in the Management Platform > Permissions configuration. Tick the option to encrypt the password. Enter com.fr.privilege.TestPasswordValidatorRSA in the text box to invoke it. After all the above settings, the RSA encryption algorithm is basically set up.
concept
From the previous blog[FineReport] Introduction(link), you can understand what FineReport can do, then if we want to develop FineReport, we need an environment, and then deploy
There are two types of deployment here. One is independent deployment. The decision system made by FineReport can be deployed as a stand-alone system. At the same time, it is embedded in our existing system. For details, please refer to the official help documentation. Independent deployment
Preparation environment
Navigate to the root directory of the software installation and copy everything to a new folder;
Open the software, click [File] -> [Switch Working Directory] -> [Other] -> [+] -> [Local Directory] -> Select the new folder you just created and select the ./WebReport/WEB-INF folder. As a directory;
You can delete the original reports, the folder can be deleted by clicking [Open folder], so that you can have a pure environment, of course, you can leave it as a reference;
Deployment release
After the development is complete, locate the folder that you created;
Copy the WebReport folder to Tomcat's webapps folder.
Run tomcat and enter it in the browserhttp://localhost:8080/WebReport/ReportServer?reportlet=GettingStarted.cpt(This address is based on the specific project name and report, WebReport is your project name, GettingStarted.cpt is your specific report name, this can be seen by previewing the corresponding name during development)
Summary, finereport9.0 crack version | finereport10.0 crack concurrency number | finereport authorized registration | FineBI5.0 crack lic
FineReport can be deployed not only independently, but also embedded in our existing projects, providing us with a lot of help in analyzing and displaying data.
Now it seems that for some small systems, FineReport is directly connected to the database and can be developed very quickly;
Of course, for large systems, there is big data, which is also a good choice. After all, the soft entry point is on the data;
As FineReport said: Make data a productivity
Finereport9.0 crack version | finereport10.0 crack concurrency number | finereport authorized registration | FineBI5.0 crack lic