安全编码-1

2.1 不要抑制或忽略已检查异常:
  java checked exceptions are the ones that you must handle in your code, like "SQLException" etc.

       on the other hand, unchecked exceptions are the ones that you don't need to handle. like "NullPointerException" etc.

       public class RuntimeExceptionextends ExceptionRuntimeException 是那些可能在 Java 虚拟机正常运行期间抛出的异常的超类。 

可能在执行方法期间抛出但未被捕获的 RuntimeException 的任何子类都无需在 throws 子句中进行声明。 

也就是未检查异常。 

相反就是已检查异常,如: 

public class IOExceptionextends Exception当发生某种 I/O 异常时,抛出此异常。此类是失败或中断的 I/O 操作生成的异常的通用类。 


view plaincopy to clipboardprint?
package cn.partner4java.exception;  
  
import java.io.IOException;  
  
public class CheckedTest {  
  
    public static void main(String[] args) {  
        //必须要捕获或者抛出  
        try {  
            checkedTest();  
        } catch (IOException e) {  
            e.printStackTrace();  
        }  
    }  
      
    public static void checkedTest() throws IOException{  
        System.out.println("Say,hello world!");  
    }  
  
    public static void checkedTest2() {  
        //必须要被捕获和抛出,抛出后面也不能再写代码  
        try {  
            throw new IOException();  
        } catch (IOException e) {  
            e.printStackTrace();  
        }  
        System.out.println("Say,hello world!");  
    }  
}  

 


view plaincopy to clipboardprint?
package cn.partner4java.exception;  
  
public class UnCheckedTest {  
  
    public static void main(String[] args) {  
        //调用不需要捕获  
        unCheckedTest();  
    }  
      
    public static void unCheckedTest() throws RuntimeException{  
        System.out.println("Say,hello world!");  
    }  
      
      
    public static void unCheckedTest2() {  
        System.out.println("Say,hello world!");  
        //不用被捕获和抛出  
        throw new RuntimeException();  
    }  
  
}  

       对于"已检查异常"必须提供异常处理器,以Class.forName为例
       //forName()方法可能会抛出已检查异常,所以必须提供异常处理器,
       //  否则编译器在编译时会报告错误
public class TestException
{
  public static void main(String[] args)
  {
    try
    { String name ="haha";
      Class c=Class.forName(name);
      System.out.println(c.getName());
    }
    catch(Exception e)
    {
   e.printStackTrace();
 }
  }
}
若不提供异常处理器,
public class TestException
{
  public static void main(String[] args)
  {
      String name ="haha";
      Class c=Class.forName(name);
      System.out.println(c.getName());
  }
}
则编译时编译器会报告一下错误:
未报告的异常 java.lang.ClassNotFoundException;
必须对其进行捕捉或声明以便抛出
      Class c=Class.forName(name);


异常处理是java的一个强大而实用的特性,使异常变得更加容易使用,但同时也使我们更不容易恰如其分的使用――《practical java》 
java的异常由try/catch/finally段组合,它们又可以任意嵌套(nest)。如果程序中有多处异常发生,但返回给最初调用端的却只有最后发生的异常,前边的多个异常会被遮掩或丢失了――如果我们不进行有效处理的话!可见,我们不应该忽略异常,或是catch了却不处理,这将导致后序程序更易出错且无法很好判断错误的源头;同时,也不应该丢失在抛出过程中一些异常,因为通常需要根据异常信息来产生回复,而我们必须得到每一个应该得到的异常信息。 
下面一个简单的例子说明了上述bad情况是会经常发生的:
package test; 
public class hideexceptionyn {
    public static void main(string[] args) {
        hideexceptionyn hideexceptionyn = new hideexceptionyn();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java安全编码规范是一种旨在保证Java应用程序在设计和实现过程中融入安全性的方法。它提供了一系列的最佳实践和准则,以帮助开发人员避免常见的安全漏洞和攻击。 首先,Java安全编码规范要求开发人员在编写代码时使用安全的API和框架。这些API和框架经过认证,并提供了一些内置的安全机制,例如输入验证,防止SQL注入、跨站脚本攻击和其他常见的攻击方式。 其次,规范还指导开发人员使用正确的安全配置。这包括使用安全性能较高的密码算法来存储敏感信息,以及正确配置安全选项,如TLS/SSL协议,以确保数据在传输过程中的保密性和完整性。 另外,Java安全编码规范要求开发人员进行足够的输入验证。这包括检查用户输入数据的边界,使用白名单验证来防止恶意数据的注入,以及使用有效的正则表达式来验证输入格式的正确性。 规范还强调了访问控制和身份验证的重要性。开发人员应该使用安全性能较高的身份验证机制,例如双因素认证和基于角色的访问控制,以确保只有经过授权的用户才能访问敏感信息和功能。 此外,规范还推荐开发人员定期进行安全性测试和代码审查,以发现潜在的漏洞和缺陷,并及时修复它们。 总之,Java安全编码规范致力于提高Java应用程序的安全性,减少潜在的安全漏洞和攻击。遵循这些规范可以保护用户数据的安全,并保证系统的稳定和可靠性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值