有没有办法在grails应用程序中添加第三方servlet?

有没有办法在grails应用程序中添加第三方servlet?,grails,spring-mvc,spring-security,waffle,Grails,Spring Mvc,Spring Security,Waffle,我是grails新手,想知道是否有办法在grails应用程序中添加第三方servlet 我正在尝试使用grails。我使用spring security成功地在MVC应用程序中使用了华夫格,如下所述: 在我的MVC应用程序中,我可以添加这样的bean进行身份验证: <bean id="waffleNegotiateSecurityFilter" class="waffle.spring.NegotiateSecurityFilter"> <property name="

我是grails新手,想知道是否有办法在grails应用程序中添加第三方servlet

我正在尝试使用grails。我使用spring security成功地在MVC应用程序中使用了华夫格,如下所述:

在我的MVC应用程序中,我可以添加这样的bean进行身份验证:

<bean id="waffleNegotiateSecurityFilter" class="waffle.spring.NegotiateSecurityFilter">
    <property name="provider" ref="waffleSecurityFilterProviderCollection"/>
    <property name="allowGuestLogin" value="false"/>
    <property name="principalFormat" value="fqn"/>
    <property name="roleFormat" value="both"/>
</bean>

您必须添加映射到web.xml的过滤器

使用grails命令安装web.xml

> grails install-templates
然后编辑web.xml文件(在src/templates内)

并添加您向我们展示的文档中所述的映射

然后将bean定义添加到grails资源中

/conf/spring/resources.groogy

将XMLBean定义转换为grails-spring-groovy DSL可能有点困难。如果您有任何问题,请参考指南或在此处询问。

我已经为此奋斗了几天,最后在一个普通的Grails 2.4.4项目中完成了以下工作:

grails create-app
grails install-templates
然后修改BuildConfig.groovy

dependencies {
...
compile "com.google.guava:guava:18.0"
compile "com.github.dblock.waffle:waffle-jna:1.7.3"
compile "net.java.dev.jna:jna:4.1.0"
compile "net.java.dev.jna:jna-platform:4.1.0"
compile "org.slf4j:slf4j-api:1.7.9"
....
}

然后我在下面创建了context.xml。\META-INF,内容如下:

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE Context>
<Context>
    <Valve className="waffle.apache.NegotiateAuthenticator" principalFormat="fqn" roleFormat="both" protocols="Negotiate,NTLM" />
    <Realm className="waffle.apache.WindowsRealm" />
</Context>

然后将以下内容添加到。\templates\web.xml文件中:

<display-name>/@grails.project.key@</display-name>
<security-constraint>
    <display-name>Waffle Security Constraint</display-name>
    <web-resource-collection>
        <web-resource-name>Protected Area</web-resource-name>
        <url-pattern>/</url-pattern>
        <http-method>DELETE</http-method>
        <http-method>GET</http-method>
        <http-method>POST</http-method>
        <http-method>PUT</http-method>
    </web-resource-collection>
    <auth-constraint>
        <role-name>Everyone</role-name>
    </auth-constraint>
</security-constraint>
<security-role>
    <role-name>Everyone</role-name>
</security-role>
....
....
//grails.project.key@
华夫格安全约束
保护区
/
删去
收到
邮递
放
每个人
每个人
....
....
为了验证它是否有效,我在index.gsp中添加了一行

<p>You are logged in as remote user <b>${request.getRemoteUser()}</b> in session <b>${session.getId()}</b>.</p>
您以远程用户${request.getRemoteUser()}的身份登录到会话${session.getId()}


我在Tomcat7.0.57下进行了测试,不得不向Tomcatlib中添加一些jar来让我工作。我添加了slf4j-api-1.7.9.jar、guava-18.0.jar、jna-platform-4.1.0.jar、jna-4.1.0.jar、waffle-tomcat7-1.7.3.jar、waffle-jna-1.7.3.jar。仍然想知道,当同样的jar也被添加到BuildConfig.groovy中时,为什么这实际上是必要的

您是否尝试过使用DSL将bean声明添加到grails app/conf/spring/resources.groovy中?在提供的链接下面,您不需要添加任何额外的过滤器。只需配置Spring安全性,就可以使用标准Spring安全性plugin@IgorArtamonov今天下午我将尝试这种方法。我会回来报到的。感谢您可以像在grails app/conf/spring/resources.XML中一样使用xmlbean配置,您不必将其转换为groovy。