auth-constraint - role-name - user - ignored

时间:2015-05-15 15:38:50

标签: web-services jsf glassfish jax-ws java-ee-7

我正在尝试了解JAX-WS中的身份验证,因此我使用JAX-WS Web服务创建了一个小型Netbeans8.0.2 / Glassfish4.1 Web应用程序,我试图使其不公开,但可以授权仅限用户。

此Web服务的web.xml文件包含:

    <security-constraint>
        <web-resource-collection>
            <web-resource-name>Fib Web Service</web-resource-name>
            <url-pattern>/FibServiceWithAuth/*</url-pattern>
            <http-method>*</http-method>
        </web-resource-collection>
        <auth-constraint>
            <role-name>user</role-name>
        </auth-constraint>
    </security-constraint>
    <login-config>
        <auth-method>BASIC</auth-method>
        <realm-name>file</realm-name>
    </login-config>

但是,当我制作另一个使用此服务的简单网络应用时, 它无需任何身份验证即可运行,请参见此处:

http://kempelen.ii.fmph.uniba.sk:8080/FibApp/

我知道我应该从处理这个JSF页面的JSF托管bean连接到服务,如下所示:

package fibapp;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.xml.ws.BindingProvider;
import javax.xml.ws.WebServiceRef;

@ManagedBean
@RequestScoped
public class FibBean 
{
    public FibBean() { }

    int n;
    String result;

    public int getN() { return n; }
    public void setN(int newN) { n = newN; }

    public String getResult() { return result; }
    public void setResult(String newResult) { result = newResult; }

    @WebServiceRef(wsdlLocation = "http://kempelen.ii.fmph.uniba.sk:8080/FibServiceWithAuth/FibWithAuth?wsdl")
    private FibWithAuth_Service fibService;

    public void compute() 
    {
        FibWithAuth fib = fibService.getFibWithAuthPort();
    //    ((BindingProvider) fib).getRequestContext().put(BindingProvider.USERNAME_PROPERTY, "someuser");
    //    ((BindingProvider) fib).getRequestContext().put(BindingProvider.PASSWORD_PROPERTY, "somepass");
        result = fib.fib(n).toString();
    }
}

但即使这些用户/传递行被注释掉,bean仍然会从webservice获得结果。

什么遗漏,拜托?

1 个答案:

答案 0 :(得分:1)

在查看您的WSDL(在托管bean @WebServiceRef中指定)时,服务的端点是

<soap:address 
location="http://kempelen.ii.fmph.uniba.sk:8080/FibServiceWithAuth/FibWithAuth"/>

表示您的网络服务资源为/FibWithAuth

但是,您的web.xml <security-constraint>网址是

<url-pattern>/FibServiceWithAuth/*</url-pattern> 

我想你想把它改成

<url-pattern>/FibWithAuth/*</url-pattern>

如果您确实要将安全约束添加到整个FibServiceWithAuth网络应用程序,那么您的<security-constraint>网址格式将为/*

最后,我想你也想改变

<http-method>*</http-method>

<http-method>POST</http-method>

这样您的托管bean可以通过GET请求(根据您的@WebServiceRef注释)访问WSDL而无需身份验证。