小编hec*_*g87的帖子

Java Try/Catch Block的基准测试

我知道进入一个catch块在执行一个程序时有一些显着的成本,但是,我想知道是否进入try {}块也有任何影响因此我开始在google中寻找一个有很多意见的答案,但没有基准测试所有.我发现的一些答案是:

  1. Java try/catch性能,是否建议将try子句中的内容保持在最低限度?
  2. 尝试Catch Performance Java
  3. Java尝试捕获块

然而他们并没有用事实回答我的问题,所以我决定自己尝试一下.

这就是我做的.我有一个这种格式的csv文件:

host;ip;number;date;status;email;uid;name;lastname;promo_code;

状态之后的所有内容都是可选的,甚至没有相应的; ,所以在解析验证时必须要查看值是否存在,这就是我想到的try/catch问题.

我在公司里继承的当前代码是这样的:

StringTokenizer st=new StringTokenizer(line,";");  
String host = st.nextToken();
String ip = st.nextToken();
String number = st.nextToken();
String date = st.nextToken();
String status = st.nextToken();                             
String email = "";
try{
    email = st.nextToken();
}catch(NoSuchElementException e){
    email = "";
}
Run Code Online (Sandbox Code Playgroud)

它重复了用uid,name,lastname和promo_code为电子邮件做的事情.

我改变了一切:

if(st.hasMoreTokens()){
    email = st.nextToken();
}
Run Code Online (Sandbox Code Playgroud)

事实上它表现得更快.解析没有可选列的文件时.以下是平均时间:

 --- Trying:122 milliseconds
 --- Checking:33 milliseconds
Run Code Online (Sandbox Code Playgroud)

然而,这就是让我感到困惑的原因和我要问的原因:当在CSV的所有8000行中运行带有可选列值的示例时,if()版本仍然比try/catch版本表现更好,所以我的问题是

try块是否真的对我的代码没有任何性能影响?

此示例的平均时间为:

--- Trying:105 milliseconds
--- Checking:43 milliseconds
Run Code Online (Sandbox Code Playgroud)

有人能解释一下这里发生了什么吗?

非常感谢

java try-catch

8
推荐指数
1
解决办法
1169
查看次数

Spring MVC + Spring Security使用其他Web服务登录

我有一个SpringMVC Web应用程序需要通过发送用户名和密码使用Spring Security对RESTful Web服务进行身份验证.记录用户时,需要将cookie设置为用户的浏览器,并在后续调用中使用cookie通过其他RESTful Web服务验证用户会话.

我一直在寻找各地,但我无法找到一个如何实现这一目标的好例子,我的所有尝试都是徒劳的.

以下是我的想法:

我可以声明两个身份验证提供程序,第一个检查cookie,如果它因任何原因失败,它将转到第二个使用用户名和密码进行检查(如果该请求中没有用户名和密码,也会失败) .

这两种服务每次都返回用户的权限,而Spring安全性是"无状态的".

另一方面,我已经质疑自己这种方法是否正确,因为很难找到一个例子或其他有同样问题的人.这种方法有误吗?

我想要这样做而不仅仅是JDBC身份验证的原因是因为我的整个Web应用程序都是无状态的,并且数据库总是通过包装"请愿队列"的RESTful Web服务来访问,我想尊重这一点以进行用户身份验证和验证也是.

到目前为止我尝试了什么?我可以粘贴长的springSecurity-context.xml,但我现在只是列出它们:

  1. 将自定义authenticationFilter与authenticationSuccessHandler一起使用.显然不起作用,因为用户已经登录了这一点.
  2. 实现入口点ref过滤器.
  3. 在BASIC_AUTH_FILTER位置执行自定义过滤器
  4. 制作一个自定义的身份验证提供程序(经过很多运气而苦苦挣扎!).当我得到一些答案时,我正在重试这个问题.
  5. 当我决定写一个问题时,我开始使用CAS.也许在未来我可以考虑在我的webapp中使用CAS服务器,但是目前,这感觉就像一个巨大的矫枉过正.

提前致谢!

顺便说一句,我使用的是Spring Security 3.1.4和Spring MVC 3.2.3

编辑:我很感谢@coder ANSWER

这里有一些关于我所做的事情,我将尝试记录所有这些并在此处或在博客文章中发布:

<http use-expressions="true" create-session="stateless" entry-point-ref="loginUrlAuthenticationEntryPoint"
        authentication-manager-ref="customAuthenticationManager">
    <custom-filter ref="restAuthenticationFilter" position="FORM_LOGIN_FILTER" />
    <custom-filter ref="restPreAuthFilter" position="PRE_AUTH_FILTER" />
    <intercept-url pattern="/signin/**" access="permitAll" />
    <intercept-url pattern="/img/**" access="permitAll" />
    <intercept-url pattern="/css/**" access="permitAll" />
    <intercept-url pattern="/js/**" access="permitAll" />
    <intercept-url pattern="/**" access="hasRole('ROLE_USER')" />

</http>

<authentication-manager id="authManager" alias="authManager">
    <authentication-provider ref="preauthAuthProvider" />
</authentication-manager>

<beans:bean id="restPreAuthFilter" class="com.company.CustomPreAuthenticatedFilter">
    <beans:property name="cookieName" value="SessionCookie" />
    <beans:property name="checkForPrincipalChanges" value="true" /> …
Run Code Online (Sandbox Code Playgroud)

rest spring spring-mvc spring-security

5
推荐指数
1
解决办法
1万
查看次数

标签 统计

java ×1

rest ×1

spring ×1

spring-mvc ×1

spring-security ×1

try-catch ×1