首页编程java编程java注入 为什么?如何通俗的理解java的依赖注入

java注入 为什么?如何通俗的理解java的依赖注入

编程之家2023-10-1293次浏览

大家好,今天给各位分享java注入 为什么的一些知识,其中也会对如何通俗的理解java的依赖注入进行解释,文章篇幅可能偏长,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在就马上开始吧!

java注入 为什么?如何通俗的理解java的依赖注入

java防止SQL注入的几个途径

java防SQL注入,最简单的办法是杜绝SQL拼接,SQL注入攻击能得逞是因为在原有SQL语句中加入了新的逻辑,如果使用PreparedStatement来代替Statement来执行SQL语句,其后只是输入参数,SQL注入攻击手段将无效,这是因为PreparedStatement不允许在不同的插入时间改变查询的逻辑结构,大部分的SQL注入已经挡住了,在WEB层我们可以过滤用户的输入来防止SQL注入比如用Filter来过滤全局的表单参数

01importjava.io.IOException;

02importjava.util.Iterator;

java注入 为什么?如何通俗的理解java的依赖注入

03importjavax.servlet.Filter;

04importjavax.servlet.FilterChain;

05importjavax.servlet.FilterConfig;

java注入 为什么?如何通俗的理解java的依赖注入

06importjavax.servlet.ServletException;

07importjavax.servlet.ServletRequest;

08importjavax.servlet.ServletResponse;

09importjavax.servlet.http.HttpServletRequest;

10importjavax.servlet.http.HttpServletResponse;

11/**

12*通过Filter过滤器来防SQL注入攻击

13*

14*/

15publicclassSQLFilterimplementsFilter{

16privateStringinj_str="'|and|exec|insert|select|delete|update|count|*|%

|chr|mid|master|truncate|char|declare|;|or|-|+|,";

17protectedFilterConfigfilterConfig=null;

18/**

19*Shouldacharacterencodingspecifiedbytheclientbeignored?

20*/

21protectedbooleanignore=true;

22publicvoidinit(FilterConfigconfig)throwsServletException{

23this.filterConfig=config;

24this.inj_str=filterConfig.getInitParameter("keywords");

25}

26publicvoiddoFilter(ServletRequestrequest,ServletResponseresponse,

27FilterChainchain)throwsIOException,ServletException{

28HttpServletRequestreq=(HttpServletRequest)request;

29HttpServletResponseres=(HttpServletResponse)response;

30Iteratorvalues=req.getParameterMap().values().iterator();//获取所有的表单参数

31while(values.hasNext()){

32String[]value=(String[])values.next();

33for(inti=0;i<value.length;i++){

34if(sql_inj(value[i])){

35//TODO这里发现sql注入代码的业务逻辑代码

36return;

37}

38}

39}

40chain.doFilter(request,response);

41}

42publicbooleansql_inj(Stringstr)

43{

44String[]inj_stra=inj_str.split("\\|");

45for(inti=0;i<inj_stra.length;i++)

46{

47if(str.indexOf(""+inj_stra[i]+"")>=0)

48{

49returntrue;

50}

51}

52returnfalse;

53}

54}

也可以单独在需要防范SQL注入的JavaBean的字段上过滤:

1/**

2*防止sql注入

3*

4*@paramsql

5*@return

6*/

7publicstaticStringTransactSQLInjection(Stringsql){

8returnsql.replaceAll(".*([';]+|(--)+).*","");

9}

java spring中 为什么dao 和service用依赖注入

使用了依赖注入的类可以在spring容器中统一控制这些类的实例模式(单例模式、原型模式...),为的就是解决高并发和多线程造成的性能和安全问题。而实体类不需要考虑Dao、service的这些问题,你可以使用依赖注入:

第一显得特别麻烦

第二默认情况下被spring管理的bean都是单例模式,这种情况下容易出现数据问题(因为只实例化一次,多出用到了)

java中preparedstatement为什么可以防止sql注入

其实是预编译功能,用preparedstatement就会把sql的结构给数据库预编译。

SQL注入攻击是利用是指利用设计上的漏洞,在目标服务器上运行 Sql语句以及进行其他方式的攻击,

动态生成 Sql语句时没有对用户输入的数据进行验证是 Sql注入攻击得逞的主要原因。

对于 JDBC而言, SQL注入攻击只对 Statement有效,对 PreparedStatement是无效的,这是因为 PreparedStatement不允许在不同的插入时间改变查询的逻辑结构。

如验证用户是否存在的 SQL语句为:

select count(*) from usertable where name='用户名' and pswd='密码'

如果在用户名字段中输入' or'1'='1' or'1'='1

或是在密码字段中输入 1' or'1'='1

将绕过验证,但这种手段只对只对 Statement有效,对 PreparedStatement无效。

PreparedStatement相对 Statement有以下优点:

1.防注入攻击

2.多次运行速度快

3.防止数据库缓冲区溢出

4.代码的可读性可维护性好

加油!

如何通俗的理解java的依赖注入

假设你编写了两个类,一个是人(Person),一个是手机(Mobile)。

人有时候需要用手机打电话,需要用到手机的callUp方法。

传统的写法是这样:

Java code

public class Person{

public boolean makeCall(long number){

Mobile mobile=new Mobile();

return mobile.callUp(number);

}

}

也就是说,类Person的makeCall方法对Mobile类具有依赖,必须手动生成一个新的实例new Mobile()才可以进行之后的工作。

依赖注入的思想是这样,当一个类(Person)对另一个类(Mobile)有依赖时,不再该类(Person)内部对依赖的类(Moblile)进行实例化,而是之前配置一个beans.xml,告诉容器所依赖的类(Mobile),在实例化该类(Person)时,容器自动注入一个所依赖的类(Mobile)的实例。

接口:

Java code

public Interface MobileInterface{

public boolean callUp(long number);

}

Person类:

Java code

public class Person{

private MobileInterface mobileInterface;

public boolean makeCall(long number){

return this.mobileInterface.callUp(number);

}

public void setMobileInterface(MobileInterface mobileInterface){

this.mobileInterface=mobileInterface;

}

}

在xml文件中配置依赖关系

Java code

<bean id="person" class="Person">

<property name="mobileInterface">

<ref local="mobileInterface"/>

</property>

</bean>

<bean id="mobileInterface" class="Mobile"/>

这样,Person类在实现拨打电话的时候,并不知道Mobile类的存在,它只知道调用一个接口MobileInterface,而MobileInterface的具体实现是通过Mobile类完成,并在使用时由容器自动注入,这样大大降低了不同类间相互依赖的关系。

java依赖注入的方法:set注入,构造方法注入,接口注入。

好了,文章到此结束,希望可以帮助到大家。

java什么是弱一致性,java专业技能java io有什么作用,java中的IO流是什么啊该怎么理解啊