md5加密用户登陆遇到的问题及解决办法

来源:互联网 发布:知乎空气质量检测仪 编辑:程序博客网 时间:2024/05/16 12:29
有个项目的登陆模块使用到了cas,应需求要求,用户名和密码传输时使用了md5加密模式,加密的密码可以直接保存在数据库,但是加密的用户名则必须解密出来才行,于是后台的java代码中便写了针对用户名的解密代码。

而前台,是在输完用户名和密码后,点击登陆按钮的时候调用相应的方法进行加密并发请求传输。

但是测试过程中却发现了一个问题,就是在有的时候输完用户名、密码和验证码以后回车,后台会报如下的数组下标越界的异常:
java.lang.ArrayIndexOutOfBoundsException: 5        at org.jasig.cas.util.Base64Util.decode(Base64Util.java:41)        at org.jasig.cas.authentication.MyAcceptUsersAuthenticationHandler.authenticateUsernamePasswordInternal(MyAcceptUsersAuthenticationHandler.java:32)        at org.jasig.cas.authentication.handler.support.AbstractUsernamePasswordAuthenticationHandler.doAuthentication(AbstractUsernamePasswordAuthenticationHandler.java:71)        at org.jasig.cas.authentication.handler.support.AbstractPreAndPostProcessingAuthenticationHandler.authenticate_aroundBody2(AbstractPreAndPostProcessingAuthenticationHandler.java:85)        at org.jasig.cas.authentication.handler.support.AbstractPreAndPostProcessingAuthenticationHandler.authenticate_aroundBody3$advice(AbstractPreAndPostProcessingAuthenticationHandler.java:57)        at org.jasig.cas.authentication.handler.support.AbstractPreAndPostProcessingAuthenticationHandler.authenticate(AbstractPreAndPostProcessingAuthenticationHandler.java:1)        at org.jasig.cas.authentication.AuthenticationManagerImpl.authenticateAndObtainPrincipal(AuthenticationManagerImpl.java:93)        at org.jasig.cas.authentication.AbstractAuthenticationManager.authenticate_aroundBody0(AbstractAuthenticationManager.java:57)        at org.jasig.cas.authentication.AbstractAuthenticationManager.authenticate_aroundBody1$advice(AbstractAuthenticationManager.java:57)        at org.jasig.cas.authentication.AbstractAuthenticationManager.authenticate(AbstractAuthenticationManager.java:1)        at sun.reflect.GeneratedMethodAccessor73.invoke(Unknown Source)        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)        at java.lang.reflect.Method.invoke(Method.java:606)        at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:318)        at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183)        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)        at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:80)        at org.perf4j.aop.AbstractTimingAspect$1.proceed(AbstractTimingAspect.java:47)        at org.perf4j.aop.AgnosticTimingAspect.runProfiledMethod(AgnosticTimingAspect.java:53)        at org.perf4j.aop.AbstractTimingAspect.doPerfLogging(AbstractTimingAspect.java:45)        at sun.reflect.GeneratedMethodAccessor38.invoke(Unknown Source)        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)        at java.lang.reflect.Method.invoke(Method.java:606)        at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:621)        at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:610)        at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:65)        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:161)        at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:80)        at com.github.inspektr.audit.AuditTrailManagementAspect.handleAuditTrail(AuditTrailManagementAspect.java:126)        at sun.reflect.GeneratedMethodAccessor37.invoke(Unknown Source)        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)        at java.lang.reflect.Method.invoke(Method.java:606)        at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:621)        at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:610)        at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:65)        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:161)        at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:90)        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)        at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)        at com.sun.proxy.$Proxy24.authenticate(Unknown Source)        at org.jasig.cas.CentralAuthenticationServiceImpl.createTicketGrantingTicket_aroundBody10(CentralAuthenticationServiceImpl.java:477)        at org.jasig.cas.CentralAuthenticationServiceImpl.createTicketGrantingTicket_aroundBody11$advice(CentralAuthenticationServiceImpl.java:57)        at org.jasig.cas.CentralAuthenticationServiceImpl.createTicketGrantingTicket(CentralAuthenticationServiceImpl.java:1)        at sun.reflect.GeneratedMethodAccessor72.invoke(Unknown Source)        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)        at java.lang.reflect.Method.invoke(Method.java:606)        at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:318)        at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183)        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)        at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:80)        at org.perf4j.aop.AbstractTimingAspect$1.proceed(AbstractTimingAspect.java:47)        at org.perf4j.aop.AgnosticTimingAspect.runProfiledMethod(AgnosticTimingAspect.java:53)        at org.perf4j.aop.AbstractTimingAspect.doPerfLogging(AbstractTimingAspect.java:45)        at sun.reflect.GeneratedMethodAccessor38.invoke(Unknown Source)        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)        at java.lang.reflect.Method.invoke(Method.java:606)        at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:621)        at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:610)        at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:65)        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:161)        at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:80)        at com.github.inspektr.audit.AuditTrailManagementAspect.handleAuditTrail(AuditTrailManagementAspect.java:126)        at sun.reflect.GeneratedMethodAccessor37.invoke(Unknown Source)        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)        at java.lang.reflect.Method.invoke(Method.java:606)        at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:621)        at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:610)        at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:65)        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:161)        at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:90)        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)        at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)        at com.sun.proxy.$Proxy25.createTicketGrantingTicket(Unknown Source)        at org.jasig.cas.authentication.ImageVaditeAuthenticationViaFormAction.submit(ImageVaditeAuthenticationViaFormAction.java:124)        at sun.reflect.GeneratedMethodAccessor71.invoke(Unknown Source)        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)        at java.lang.reflect.Method.invoke(Method.java:606)        at ognl.OgnlRuntime.invokeMethod(OgnlRuntime.java:851)        at ognl.OgnlRuntime.callAppropriateMethod(OgnlRuntime.java:1253)        at ognl.ObjectMethodAccessor.callMethod(ObjectMethodAccessor.java:68)        at ognl.OgnlRuntime.callMethod(OgnlRuntime.java:1329)        at ognl.ASTMethod.getValueBody(ASTMethod.java:90)        at ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:212)        at ognl.SimpleNode.getValue(SimpleNode.java:258)        at ognl.ASTChain.getValueBody(ASTChain.java:141)        at ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:212)        at ognl.SimpleNode.getValue(SimpleNode.java:258)        at ognl.Ognl.getValue(Ognl.java:494)        at org.springframework.binding.expression.ognl.OgnlExpression.getValue(OgnlExpression.java:85)        at org.springframework.webflow.action.EvaluateAction.doExecute(EvaluateAction.java:75)        at org.springframework.webflow.action.AbstractAction.execute(AbstractAction.java:188)        at org.springframework.webflow.execution.AnnotatedAction.execute(AnnotatedAction.java:145)        at org.springframework.webflow.execution.ActionExecutor.execute(ActionExecutor.java:51)        at org.springframework.webflow.engine.ActionState.doEnter(ActionState.java:101)        at org.springframework.webflow.engine.State.enter(State.java:194)        at org.springframework.webflow.engine.Transition.execute(Transition.java:227)        at org.springframework.webflow.engine.impl.FlowExecutionImpl.execute(FlowExecutionImpl.java:393)        at org.springframework.webflow.engine.impl.RequestControlContextImpl.execute(RequestControlContextImpl.java:214)        at org.springframework.webflow.engine.TransitionableState.handleEvent(TransitionableState.java:119)        at org.springframework.webflow.engine.Flow.handleEvent(Flow.java:555)        at org.springframework.webflow.engine.impl.FlowExecutionImpl.handleEvent(FlowExecutionImpl.java:388)        at org.springframework.webflow.engine.impl.RequestControlContextImpl.handleEvent(RequestControlContextImpl.java:210)        at org.springframework.webflow.engine.ViewState.handleEvent(ViewState.java:232)        at org.springframework.webflow.engine.ViewState.resume(ViewState.java:196)        at org.springframework.webflow.engine.Flow.resume(Flow.java:545)        at org.springframework.webflow.engine.impl.FlowExecutionImpl.resume(FlowExecutionImpl.java:261)        at org.springframework.webflow.executor.FlowExecutorImpl.resumeExecution(FlowExecutorImpl.java:169)        at org.springframework.webflow.mvc.servlet.FlowHandlerAdapter.handle(FlowHandlerAdapter.java:183)        at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:923)        at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:852)        at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882)        at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:789)        at javax.servlet.http.HttpServlet.service(HttpServlet.java:647)        at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)        at org.jasig.cas.web.init.SafeDispatcherServlet.service_aroundBody2(SafeDispatcherServlet.java:128)        at org.jasig.cas.web.init.SafeDispatcherServlet.service_aroundBody3$advice(SafeDispatcherServlet.java:57)        at org.jasig.cas.web.init.SafeDispatcherServlet.service(SafeDispatcherServlet.java:1)        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)        at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)        at com.github.inspektr.common.web.ClientInfoThreadLocalFilter.doFilter(ClientInfoThreadLocalFilter.java:63)        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)        at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)        at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346)        at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:259)        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)        at org.jasig.cas.util.CookieFilter.doFilter(CookieFilter.java:57)        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)        at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:409)        at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1044)        at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)        at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:313)        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)        at java.lang.Thread.run(Thread.java:745)


debug之后发现了问题所在:

正常情况下,登陆时前台传递的用户名和密码应该是md5加密后的数据,但是在上面那种情况下传递的却并没有加密,在input中输入了什么,传递的依然还是什么。

这也就是说,回车之后根本就没有走md5加密数据的方法,因此,不是md5加密的,却用了md5加密的方式解密,程序便出现如上的异常。

最终的解决办法是在登陆界面的那些input中加上如下属性:
onkeypress="if(event.keyCode == 13) return false;"

也就是禁用了input上的enter键,在input上回车就不会再发请求到后台,也就不会再出现上述的问题。

参考文档:event.keyCode用法及列表
0 0
原创粉丝点击