❶ spring 怎麼初始化加密的類
hi, 下面是一個classloader的例子, 你需要做的就是更新那個getClassData函數,先做解密,然後將結果的byte[]返回就好了。有問題的話,請告訴我。
package classloader;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.net.URL;
/**
* 載入網路class的ClassLoader
*/
public class NetworkClassLoader extends ClassLoader {
private String rootUrl;
public NetworkClassLoader(String rootUrl) {
this.rootUrl = rootUrl;
}
@Override
protected Class<?> findClass(String name) throws ClassNotFoundException {
Class clazz = null;//this.findLoadedClass(name); // 父類已載入
//if (clazz == null) { //檢查該類是否已被載入過
byte[] classData = getClassData(name); //根據類的二進制名稱,獲得該class文件的位元組碼數組
if (classData == null) {
throw new ClassNotFoundException();
}
clazz = defineClass(name, classData, 0, classData.length); //將class的位元組碼數組轉換成Class類的實例
//}
return clazz;
}
private byte[] getClassData(String name) {
InputStream is = null;
try {
String path = classNameToPath(name);
URL url = new URL(path);
byte[] buff = new byte[1024*4];
int len = -1;
is = url.openStream();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
while((len = is.read(buff)) != -1) {
baos.write(buff,0,len);
}
return baos.toByteArray();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (is != null) {
try {
is.close();
} catch(IOException e) {
e.printStackTrace();
}
}
}
return null;
}
private String classNameToPath(String name) {
return rootUrl + "/" + name.replace(".", "/") + ".class";
}
}
❷ springmvc spring mybatis 框架搭建的MAVEN項目,怎麼加密解密啊,有源碼嗎
不知道你說的加密解密是指項目中對某個欄位加密解密,還是 要多源碼進行加密解密,如果是對某個欄位加密解密,比如密碼,可以自己手寫一個工具類(網上也可以找到),將傳過去的字元串用MD5或者sha1加密後返回的方式,需要加密就調用這個方法,如果你要對整個項目的源碼加密,那應該是沒辦法,因為不管怎麼加密運行的時候都需要轉化為位元組碼。位元組碼.class都是可以反編譯過來的
❸ springmvc返回值 統一加密怎麼寫
項目中使用spring mvc的@ResponseBody註解返回結果,現在的需求是不改變原來的業務邏輯代碼,對結果進行加密,如何處理?
@Controller
@RequestMapping(value = "/crypt")
public class CryptController {
@ResponseBody
@RequestMapping(value = "/decrypt", method = RequestMethod.GET)
public String decrypt(int id, String name) {
return "id=" + id + ", name=" + name;
}
}
❹ spring提供的幾種密碼加密方式
第一種:不使用任何加密方式的配置
[html]view plain
<beanid="AuthenticationProvider"
class="org.acegisecurity.providers..DaoAuthenticationProvider">
<propertyname="userDetailsService"ref="userDetailsService"/>
<!--明文加密,不使用任何加密演算法,在不指定該配置的情況下,Acegi默認採用的就是明文加密-->
<!--<propertyname="passwordEncoder"><beanclass="org.acegisecurity.providers.encoding.PlaintextPasswordEncoder">
<propertyname="ignorePasswordCase"value="true"></property></bean></property>-->
</bean>
第二種:MD5方式加密
[html]view plain
<beanid="AuthenticationProvider"class="org.acegisecurity.providers..DaoAuthenticationProvider">
<propertyname="userDetailsService"ref="userDetailsService"/>
<propertyname="passwordEncoder">
<beanclass="org.acegisecurity.providers.encoding.Md5PasswordEncoder">
<!--false表示:生成32位的Hex版,這也是encodeHashAsBase64的,Acegi默認配置;true表示:生成24位的Base64版-->
<propertyname="encodeHashAsBase64"value="false"/>
</bean>
</property>
</bean>
第三種:使用MD5加密,並添加全局加密鹽
Java代碼
[html]view plain
<beanid="AuthenticationProvider"class="org.acegisecurity.providers..DaoAuthenticationProvider">
<propertyname="userDetailsService"ref="userDetailsService"/>
<propertyname="passwordEncoder">
<beanclass="org.acegisecurity.providers.encoding.Md5PasswordEncoder">
<propertyname="encodeHashAsBase64"value="false"/>
</bean>
</property>
<!--對密碼加密演算法中使用特定的加密鹽及種子-->
<propertyname="saltSource">
<beanclass="org.acegisecurity.providers..salt.SystemWideSaltSource">
<propertyname="systemWideSalt"value="acegisalt"/>
</bean>
</property>
</bean>
第四種:使用MD5加密,並添加動態加密鹽
[html]view plain
<beanid="AuthenticationProvider"class="org.acegisecurity.providers..DaoAuthenticationProvider">
<propertyname="userDetailsService"ref="userDetailsService"/>
<propertyname="passwordEncoder">
<beanclass="org.acegisecurity.providers.encoding.Md5PasswordEncoder">
<propertyname="encodeHashAsBase64"value="false"/>
</bean>
</property>
<!--對密碼加密演算法中使用特定的加密鹽及種子-->
<propertyname="saltSource">
<!--通過動態的加密鹽進行加密,該配置通過用戶名提供加密鹽,通過UserDetails的getUsername()方式-->
<beanclass="org.acegisecurity.providers..salt.ReflectionSaltSource">
<propertyname="userPropertyToUse"value="getUsername"/>
</bean>
</property>
</bean>
第五種:使用哈希演算法加密,加密強度為256
[html]view plain
<beanid="AuthenticationProvider"class="org.acegisecurity.providers..DaoAuthenticationProvider">
<propertyname="userDetailsService"ref="userDetailsService"/>
<propertyname="passwordEncoder">
<beanclass="org.acegisecurity.providers.encoding.ShaPasswordEncoder">
<constructor-argvalue="256"/>
<propertyname="encodeHashAsBase64"value="false"/>
</bean>
</property>
</bean>
第六種:使用哈希演算法加密,加密強度為SHA-256
[html]view plain
<beanid="AuthenticationProvider"class="org.acegisecurity.providers..DaoAuthenticationProvider">
<propertyname="userDetailsService"ref="userDetailsService"/>
<propertyname="passwordEncoder">
<beanclass="org.acegisecurity.providers.encoding.ShaPasswordEncoder">
<constructor-argvalue="SHA-256"/>
<propertyname="encodeHashAsBase64"value="false"/>
</bean>
</property>
</bean>
上述配置只是在Acegi通過表單提交的用戶認證信息中的密碼做各種加密操作。而我們存儲用戶密碼的時候,可以通過一下程序完成用戶密碼操作:
[java]view plain
packageorg.hz.test;
importjava.security.NoSuchAlgorithmException;
importorg.springframework.security.authentication.encoding.Md5PasswordEncoder;
importorg.springframework.security.authentication.encoding.ShaPasswordEncoder;
publicclassMD5Test{
publicstaticvoidmd5(){
Md5PasswordEncodermd5=newMd5PasswordEncoder();
//false表示:生成32位的Hex版,這也是encodeHashAsBase64的,Acegi默認配置;true表示:生成24位的Base64版
md5.setEncodeHashAsBase64(false);
Stringpwd=md5.encodePassword("1234",null);
System.out.println("MD5:"+pwd+"len="+pwd.length());
}
publicstaticvoidsha_256(){
ShaPasswordEncodersha=newShaPasswordEncoder(256);
sha.setEncodeHashAsBase64(true);
Stringpwd=sha.encodePassword("1234",null);
System.out.println("哈希演算法256:"+pwd+"len="+pwd.length());
}
publicstaticvoidsha_SHA_256(){
ShaPasswordEncodersha=newShaPasswordEncoder();
sha.setEncodeHashAsBase64(false);
Stringpwd=sha.encodePassword("1234",null);
System.out.println("哈希演算法SHA-256:"+pwd+"len="+pwd.length());
}
publicstaticvoidmd5_SystemWideSaltSource(){
Md5PasswordEncodermd5=newMd5PasswordEncoder();
md5.setEncodeHashAsBase64(false);
//使用動態加密鹽的只需要在注冊用戶的時候將第二個參數換成用戶名即可
Stringpwd=md5.encodePassword("1234","acegisalt");
System.out.println("MD5SystemWideSaltSource:"+pwd+"len="+pwd.length());
}
publicstaticvoidmain(String[]args){
md5();//使用簡單的MD5加密方式
sha_256();//使用256的哈希演算法(SHA)加密
sha_SHA_256();//使用SHA-256的哈希演算法(SHA)加密
md5_SystemWideSaltSource();//使用MD5再加全局加密鹽加密的方式加密
}
}
❺ spring security為什麼要加密
spring security也就是被大家廣為熟悉的acegi security,2007年底Acegi Security正式成為Spring Portfolio項目,並更名為Spring Security。Spring Security是一個能夠為基於spring的企業應用系統提供描述性安全訪問控制解決方案的安全框架。 他提供了一組可以基於springIoC(依賴注入,也稱控制反轉)和AOP(面向切面編程)應用上下文中配置的Bean,充分利用了Spring功能,為應用系統提供聲明式的安全訪問控制功能,減少了為企業系統安全控制編寫大量重復代碼的工作。
❻ Spring攔截器攔截請求,獲得加密的參數,怎樣重新設置參數值
攔截器繼承HandlerInterceptorAdapter類,並重寫了preHandle();方法,在此方法中獲得了加密後的參數字元串,解密後,怎麼將解密後的參數重新設置到HttpServletRequest的URL後邊,使得Action能夠接受到這些參數?也就是替換加密的參數(request.getQueryString();方法得到的請求參數字元串,全部替換)
❼ spring實現對properties文件怎麼加密
使用註解聲明事物參看下spring2.5的新特性;在方法前面加上@transation註解,就具有了事物功能;
❽ spring安全框架在什麼方法加密
你好,Spring框架是基礎,它提供了基礎的IOC和AOP服務。
Spring security 是在Spring的基礎服務上,提供的基於Spring的企業應用系統安全訪問控制的服務。
Spring Security框架大量使用了Spring框架的AOP服務。它不能脫離Spring而使用。