我是grails的新手,想知道是否有办法在grails应用程序中添加第三方servlet?
我正在尝试使用带有grails的Waffle。我已经成功地在使用弹簧安全性的MVC应用程序中使用Waffle,如下所述:https://github.com/dblock/waffle/blob/master/Docs/spring/SpringSecurityAuthenticationProvider.md
在我的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>
答案 0 :(得分:0)
您必须添加映射到web.xml的过滤器
使用grails命令安装web.xml
> grails install-templates
编辑web.xml文件(在src / templates中)
并添加您向我们展示的文档所述的映射。
然后将bean定义添加到grails资源
/conf/spring/resources.groogy
将xml bean定义转换为grails spring groovy DSL可能有点困难。如果您有任何问题需要参考指南about grails and spring或在此处询问。
答案 1 :(得分:0)
我刚刚在这个问题上苦苦挣扎了几天,最后在一个简单的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"
....
}
然后我在.. \ META-INF下面创建了 context.xml ,其中包含以下内容:
<?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>
....
....
为了验证它确实有效,我在 index.gsp
中添加了一行<p>You are logged in as remote user <b>${request.getRemoteUser()}</b> in session <b>${session.getId()}</b>.</p>
我在Tomcat 7.0.57下进行了测试,并且必须在Tomcat lib中添加一些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 即可。仍然想知道为什么当相同的罐子也被添加到BuildConfig.groovy时,这实际上是必要的。