Spring安全表达式中的空指针异常是匿名方法

时间:2015-06-09 09:28:02

标签: spring spring-security

我使用的是Spring Security 3.2。每当我在Apache Tomcat Server上部署项目时,我都会得到Null Pointer Exception。 web.xml是

JarLib.load
Error = java.lang.UnsatisfiedLinkError: uk.co.mmscomputing.util.JarLib.loadX: Could not find library [libjsane.so]
JarLib.load
Error = java.lang.UnsatisfiedLinkError: uk.co.mmscomputing.util.JarLib.loadX: Could not find library [libjsane.so]
java.lang.UnsatisfiedLinkError: uk.co.mmscomputing.util.JarLib.loadX: Could not find library [libjsane.so]
at uk.co.mmscomputing.util.JarLib.loadX(JarLib.java:40)
at uk.co.mmscomputing.util.JarLib.load(JarLib.java:10)
at uk.co.mmscomputing.device.sane.jsane.<clinit>(jsane.java:140)
at uk.co.mmscomputing.device.sane.SaneScanner.isAPIInstalled(SaneScanner.java:17)
at uk.co.mmscomputing.device.scanner.Scanner.getDevice(Scanner.java:86)
at Scan_.<init>(Scan_.java:58)
at Scan_.main(Scan_.java:43)
JarLib.load
Error = java.lang.UnsatisfiedLinkError: no jsane in java.library.path
JarLib.load
Error = java.lang.UnsatisfiedLinkError: no jsane in java.library.path
java.lang.UnsatisfiedLinkError: no jsane in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1886)
at java.lang.Runtime.loadLibrary0(Runtime.java:849)
at java.lang.System.loadLibrary(System.java:1088)
at uk.co.mmscomputing.util.JarLib.load(JarLib.java:22)
at uk.co.mmscomputing.device.sane.jsane.<clinit>(jsane.java:140)
at uk.co.mmscomputing.device.sane.SaneScanner.isAPIInstalled(SaneScanner.java:17)
at uk.co.mmscomputing.device.scanner.Scanner.getDevice(Scanner.java:86)
at Scan_.<init>(Scan_.java:58)
at Scan_.main(Scan_.java:43)
java.lang.NullPointerException
at Scan_.<init>(Scan_.java:59)
at Scan_.main(Scan_.java:43)
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at Scan_$2.actionPerformed(Scan_.java:111)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
at     javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
at java.awt.Component.processMouseEvent(Component.java:6516)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
at java.awt.Component.processEvent(Component.java:6281)
at java.awt.Container.processEvent(Container.java:2229)
at java.awt.Component.dispatchEventImpl(Component.java:4872)
at java.awt.Container.dispatchEventImpl(Container.java:2287)
at java.awt.Component.dispatchEvent(Component.java:4698)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
at java.awt.Container.dispatchEventImpl(Container.java:2273)
at java.awt.Window.dispatchEventImpl(Window.java:2719)
at java.awt.Component.dispatchEvent(Component.java:4698)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:740)
at java.awt.EventQueue.access$300(EventQueue.java:103)
at java.awt.EventQueue$3.run(EventQueue.java:699)
at java.awt.EventQueue$3.run(EventQueue.java:697)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
at java.awt.EventQueue$4.run(EventQueue.java:713)
at java.awt.EventQueue$4.run(EventQueue.java:711)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:710)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)
^Citflux@itflux-desktop:/var/www/scannerApplet$ locate jsane.cpp
itflux@itflux-desktop:/var/www/scannerApplet$ locate libjsane.so
itflux@itflux-desktop:/var/www/scannerApplet$ javac Scan_.java
itflux@itflux-desktop:/var/www/scannerApplet$ java Scan_
JarLib.load
Error = java.lang.UnsatisfiedLinkError: uk.co.mmscomputing.util.JarLib.loadX: Could not find library [libjsane.so]
JarLib.load
Error = java.lang.UnsatisfiedLinkError: uk.co.mmscomputing.util.JarLib.loadX: Could not find library [libjsane.so]
java.lang.UnsatisfiedLinkError: uk.co.mmscomputing.util.JarLib.loadX: Could not find library [libjsane.so]
at uk.co.mmscomputing.util.JarLib.loadX(JarLib.java:40)
at uk.co.mmscomputing.util.JarLib.load(JarLib.java:10)
at uk.co.mmscomputing.device.sane.jsane.<clinit>(jsane.java:140)
at uk.co.mmscomputing.device.sane.SaneScanner.isAPIInstalled(SaneScanner.java:17)
at uk.co.mmscomputing.device.scanner.Scanner.getDevice(Scanner.java:86)
at Scan_.<init>(Scan_.java:58)
at Scan_.main(Scan_.java:43)
JarLib.load
Error = java.lang.UnsatisfiedLinkError: no jsane in java.library.path
JarLib.load
Error = java.lang.UnsatisfiedLinkError: no jsane in java.library.path
java.lang.UnsatisfiedLinkError: no jsane in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1886)
at java.lang.Runtime.loadLibrary0(Runtime.java:849)
at java.lang.System.loadLibrary(System.java:1088)
at uk.co.mmscomputing.util.JarLib.load(JarLib.java:22)
at uk.co.mmscomputing.device.sane.jsane.<clinit>(jsane.java:140)
at uk.co.mmscomputing.device.sane.SaneScanner.isAPIInstalled(SaneScanner.java:17)
at uk.co.mmscomputing.device.scanner.Scanner.getDevice(Scanner.java:86)
at Scan_.<init>(Scan_.java:58)
at Scan_.main(Scan_.java:43)
java.lang.NullPointerException
at Scan_.<init>(Scan_.java:59)
at Scan_.main(Scan_.java:43)
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at Scan_$2.actionPerformed(Scan_.java:111)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
at java.awt.Component.processMouseEvent(Component.java:6516)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
at java.awt.Component.processEvent(Component.java:6281)
at java.awt.Container.processEvent(Container.java:2229)
at java.awt.Component.dispatchEventImpl(Component.java:4872)
at java.awt.Container.dispatchEventImpl(Container.java:2287)
at java.awt.Component.dispatchEvent(Component.java:4698)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
at java.awt.Container.dispatchEventImpl(Container.java:2273)
at java.awt.Window.dispatchEventImpl(Window.java:2719)
at java.awt.Component.dispatchEvent(Component.java:4698)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:740)
at java.awt.EventQueue.access$300(EventQueue.java:103)
at java.awt.EventQueue$3.run(EventQueue.java:699)
at java.awt.EventQueue$3.run(EventQueue.java:697)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
at java.awt.EventQueue$4.run(EventQueue.java:713)
at java.awt.EventQueue$4.run(EventQueue.java:711)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:710)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)

Application context Security.xml文件是

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
 <display-name>ch04</display-name>


<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
        /WEB-INF/applicationContext-security.xml
    </param-value>
</context-param>
<filter>
    <filter-name>springSecurityFilterChain</filter-name>
    <filter-class>
        org.springframework.web.filter.DelegatingFilterProxy
    </filter-class>
</filter>

<filter-mapping>
    <filter-name>springSecurityFilterChain</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

<listener>
    <listener-class>
        org.springframework.web.context.ContextLoaderListener
    </listener-class>
</listener>

<servlet>
    <servlet-name>terrormovies</servlet-name>
    <servlet-class> org.springframework.web.servlet.DispatcherServlet </servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping><servlet-name>terrormovies</servlet-name><url-pattern>/</url-pattern></servlet-mapping></web-app>

错误的堆栈跟踪如下。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:security="http://www.springframework.org/schema/security"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/security
http://www.springframework.org/schema/security/spring-security-3.2.xsd">
<security:http auto-config="true" use-expressions="true">
    <security:expression-handler ref="expressionHandler" />
    <security:intercept-url pattern="/admin/*"
        access="hasIpAddress('127.0.0.1')and (isAnonymous() ? false : principal.lastname == 'Scarioni') and over18" />
    <security:remember-me key="terror-key" />
    <security:logout delete-cookies="JSESSIONID"
        success-handler-ref="logoutRedirectToAny" />
    <security:form-login login-page="/custom_login"
        authentication-failure-handler-ref="serverErrorHandler"
        username-parameter="user_param" password-parameter="pass_param" />
</security:http>
<security:authentication-manager>
    <security:authentication-provider
        user-service-ref="inMemoryUserServiceWithCustomUser" />
</security:authentication-manager>
<bean id="expressionHandler"
    class="com.apress.pss.terrormovies.security.CustomWebSecurityExpressionHandler" />
<bean id="inMemoryUserServiceWithCustomUser"
    class="com.apress.pss.terrormovies.spring.CustomInMemoryUserDetailsManager">
    <constructor-arg>
        <list>
            <bean class="com.apress.pss.terrormovies.model.User">
                <constructor-arg value="admin" />
                <constructor-arg value="admin" />
                <constructor-arg>
                    <list>
                        <bean class="org.springframework.security.core.authority.SimpleGrantedAuthority">              
<constructor-arg value="ROLE_ADMIN" />
          </bean>
          </list>
          </constructor-arg>
          <constructor-arg value="Scarioni" />
          <constructor-arg value="19" />
          </bean>
          </list>
          </constructor-arg>
          </bean>
          <bean id="logoutRedirectToAny"   class="org.springframework.security.web.authentication.logout.SimpleUrlLogoutSuccessHandler">
        <property name="targetUrlParameter" value="redirectTo" />
        </bean>
        <bean id="serverErrorHandler"
    class="com.apress.pss.terrormovies.security.ServerErrorFailureHandler" />

如何解决此错误?任何帮助将不胜感激

1 个答案:

答案 0 :(得分:1)

我怀疑您的CustomWebSecurityExpressionHandler出了问题。

您是否忘记设置AuthenticationTrustResolver?