如何春季安全和GWT整合?(How to integrate Spring Security and

2019-08-31 11:37发布

我试图整合春季安全和GWT。 我还使用GWT孵化器的安全性。 我配置一切,因为它是在他们的wiki页面描述。 我设法得到安全使用拦截的URL的工作,但我无法得到它的工作使用注释。 有关的问题是什么什么想法?

PS我使用Spring 2.5.6,Spring Security的2.0.5和GWT孵化器的安全性1.0.1。 任何有用的链接和评论,欢迎选购。

这里是我的配置文件

applicationContext.xml中

<?xml version="1.0" encoding="UTF-8"?>
<global-method-security secured-annotations="enabled"
    jsr250-annotations="disabled" />
<http auto-config="true">
    <!-- <intercept-url pattern="/**/*.rpc" access="ROLE_USER" /> -->
    <intercept-url pattern="/gwt/**" access="ROLE_USER" />
    <intercept-url pattern="/**" access="IS_AUTHENTICATED_ANONYMOUSLY" />
</http>
<authentication-provider>
    <user-service>
        <user name="rod" password="koala"
            authorities="ROLE_SUPERVISOR, ROLE_USER, ROLE_TELLER" />
        <user name="dianne" password="emu" authorities="ROLE_USER,ROLE_TELLER" />
        <user name="scott" password="wombat" authorities="ROLE_USER" />
        <user name="peter" password="opal" authorities="ROLE_USER" />
    </user-service>
</authentication-provider>
<beans:bean id="greetService" class="com.ct.test.server.GreetingServiceImpl" />

web.xml中

<?xml version="1.0" encoding="UTF-8"?>
<web-app>
<!-- Default page to serve -->
<welcome-file-list>
    <welcome-file>Spring_test.html</welcome-file>
</welcome-file-list>
<!--  Spring related configuration  -->
<listener>
    <listener-class>
        org.springframework.web.context.ContextLoaderListener
    </listener-class>
</listener>
<!-- Initialise the Spring MVC DispatcherServlet -->
<servlet>
    <servlet-name>spring</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<!-- Map the DispatcherServlet to only intercept RPC requests -->
<servlet-mapping>
    <servlet-name>spring</servlet-name>
    <url-pattern>/spring_test/greet.rpc</url-pattern>
    <!--
        <url-pattern>/org.example.gwtwisdom.GwtWisdom/services/*</url-pattern>
    -->
</servlet-mapping>
<servlet>
    <servlet-name>greetServlet</servlet-name>
    <servlet-class>com.ct.test.server.GreetingServiceImpl</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>greetServlet</servlet-name>
    <url-pattern>/spring_test/greet.rpc</url-pattern>
</servlet-mapping>
<!-- Spring security -->
<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>

为spring-servlet.xml

<?xml version="1.0" encoding="UTF-8"?>
<!-- The application context definition for the DispatcherServlet -->
<bean id="urlMapping" class="com.gwtincubator.security.server.GWTSecuredHandler">
    <property name="mappings">
        <map>
            <entry key="/spring_test/greet.rpc" value-ref="greetService" />
        </map>
    </property>
</bean>

下面是我试图使用Spring Security整合我的示例项目: http://www.filedropper.com/springtest_1

Answer 1:

我'使用GWT + Spring Security的。 我发现在你的配置,有一些误解。 事实上,有一个很简单的方法,可以让春季安全工作,你的GWT无论GWT孵化器的安全性 。 你只需要在你web.xml中声明你的应用程序上下文。

  <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> 

你不会在这里宣告你的MVC的DispatcherServlet! 然后一切正常,因为Spring Security框架机制。

但是配置的这种方式并没有声明DispatcherServlet的,很简单,但如果你需要需要DispatcherServlet的一些安全的funcionality,是是一个“piege”。 因此,正如我见过。

然后,如果你坚持使用GWT孵化器的安全性。 我读过法语很好的解决方案,但它取消选中休息。 http://hugo.developpez.com/tutoriels/java/gwt/utilisation-gwt-avec-spring-et-hibernate/

  1. 春集成与GWT-SL应用:其实,春天的整合和休眠,问题是如何正确配置Servlet。 每个人都应该知道,Spring有自己的servlet“的DispatcherServlet”,以便与它的“GWT的servlet” GWT的 通常情况下,在本教程的GWT RPC,GWT的小服务程序在网上的XML声明,如
  <servlet> <servlet-name>appService</servlet-name> <servlet-class>com.google.gwt.app.example.server.AppServiceImpl</servlet-class> </servlet> <servlet-mapping> <servlet-name>appService</servlet-name> <url-pattern>/app/appService</url-pattern> </servlet-mapping> 

如果你很喜欢春天,和你想用的DispatcherServlet派遣请求,然后GWT处理程序可以帮助你摆脱问题。 首先,您加载下面web.xml中的应用程序上下文:

<context-param>
<param-name> contextConfigLocation </param-name>
    <param-value> classpath:applicationContext_GWT.xml </param-value>
</context-param>
<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>

然后,你可以声明在Spring上下文中的RPC服务:applicationContext_GWT.xml

<bean id=" appService " 
         class=" com.google.gwt.app.example.server.AppServiceImpl">
</bean>

但是,你不应该忘记添加在应用程序上下文文件GWTHandler声明 applicationContext_GWT.xml
的最后一件事是声明春天的servlet:在web.xml中DispatcherServlet的。 注意这样的事实,这是春天的适当的servlet不是GWT-SL的。 web.xml中

<servlet>  
    <servlet-name>handler</servlet-name>
    <servlet-class> org.springframework.web.servlet.DispatcherServlet </servlet-class>
       <load-on-startup>1</load-on-startup>
</servlet>  
<servlet-mapping>
<servlet-name>handler</servlet-name>
<url-pattern>*.rpc</url-pattern>
</servlet-mapping>

因为DispatcherServlet将搜索由“* -servlet.xml后缀”命名的Spring上下文文件的Servlet的名字是很重要的。 由于servlet名称是处理程序,它会搜索Spring上下文“处理-servlet.xml中”。 所以在这里,我们将解决这样的问题,我们把它独立与DispatcherServlet的在“applicationContext_GWT.xml”,那么一个是取决于与的DispatcherServlet在“-servlet.xml后缀”,作为servlet应用程序上下文名称为“处理程序”,那么我们就应该有“处理-servlet.xml中”,然后把GWT_SL以下配置从applicationContext_GWT.xml到处理器,处理器servlet.xml中 - servlet.xml中

<bean id="urlProjectMapping" class="org.gwtwidgets.server.spring.GWTHandler">
        <!-- Supply here mappings between URLs and services. Services must implement the RemoteService interface but are not otherwise restricted.-->
        <property name="mappings">
             <map>
    <!-- Other mappings could follow -->
    <entry key="/app/appService.rpc" value-ref="appService" />
             </map>
         </property>
</bean> 

然后在web.xml丹斯LA声明德的servlet添加以下配置。

<init-param>
               <param-name>contextConfigLocation</param-name>
    <param-value> /WEB-INF/handler-servlet.xml </param-value>
</init-param>

过滤模式的担忧只是RPC调用带有后缀.rpc(我没有使用GWT-SL,所以上面集成方法还没有得到遏制。)

之后,你有上述所有配置,那么你在applicationi背景文件中创建您的filtreprocessentrypoint。

希望这可以帮到你!



Answer 2:

看来你缺少命名空间配置在applicationContext.xml中。

它应该是这样的:

<?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
          xmlns:sec="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-2.5.xsd
                           http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-2.0.4.xsd">


Answer 3:

该ACRIS框架也使用Spring安全。 他们有这样的描述在他们的维基http://code.google.com/p/acris/wiki/SecurityServer



Answer 4:

我猜,你必须applicationContext.xml的架构,并启用注释:

<context:annotation-config />
<context:component-scan base-package="my.package" />

参考: http://weblogs.java.net/blog/seemarich/archive/2007/11/annotation_base.html



Answer 5:

遵循春以下链接GWT的配置:

http://raibledesigns.com/rd/entry/integrating_gwt_with_spring_security

要么

http://www.javacodegeeks.com/2010/12/securing-gwt-apps-with-spring-security.html



Answer 6:

你可以使用Putnami Web工具包(PWT)框架,这里的教程来整合Spring框架 ,另一个用于春季安全 。



Answer 7:

见https://bitbucket.org/gardellajuanpablo/gwt-sample



文章来源: How to integrate Spring Security and GWT?