<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- NewPage -->
<html lang="en">
<head>
<title>HttpConstraintElement</title>
<link rel="stylesheet" type="text/css" href="../../stylesheet.css" title="Style">
<script type="text/javascript" src="../../script.js"></script>
</head>
<body>
<script type="text/javascript"><!--
    try {
        if (location.href.indexOf('is-external=true') == -1) {
            parent.document.title="HttpConstraintElement";
        }
    }
    catch(err) {
    }
//-->
var methods = {"i0":10,"i1":10,"i2":10};
var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
var tableTab = "tableTab";
var activeTableTab = "activeTableTab";
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a name="navbar.top">
<!--   -->
</a>
<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
<a name="navbar.top.firstrow">
<!--   -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../overview-summary.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../index-all.html">Index</a></li>
<li><a href="../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li><a href="../../javax/servlet/GenericServlet.html" title="class in javax.servlet"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../javax/servlet/HttpMethodConstraintElement.html" title="class in javax.servlet"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../index.html?javax/servlet/HttpConstraintElement.html" target="_top">Frames</a></li>
<li><a href="HttpConstraintElement.html" target="_top">No&nbsp;Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_top">
<li><a href="../../allclasses-noframe.html">All&nbsp;Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
  allClassesLink = document.getElementById("allclasses_navbar_top");
  if(window==top) {
    allClassesLink.style.display = "block";
  }
  else {
    allClassesLink.style.display = "none";
  }
  //-->
</script>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a name="skip.navbar.top">
<!--   -->
</a></div>
<!-- ========= END OF TOP NAVBAR ========= -->
<!-- ======== START OF CLASS DATA ======== -->
<div class="header">
<div class="subTitle">javax.servlet</div>
<h2 title="Class HttpConstraintElement" class="title">Class HttpConstraintElement</h2>
</div>
<div class="contentContainer">
<ul class="inheritance">
<li>java.lang.Object</li>
<li>
<ul class="inheritance">
<li>javax.servlet.HttpConstraintElement</li>
</ul>
</li>
</ul>
<div class="description">
<ul class="blockList">
<li class="blockList">
<dl>
<dt>Direct Known Subclasses:</dt>
<dd><a href="../../javax/servlet/HttpMethodConstraintElement.html" title="class in javax.servlet">HttpMethodConstraintElement</a>, <a href="../../javax/servlet/ServletSecurityElement.html" title="class in javax.servlet">ServletSecurityElement</a></dd>
</dl>
<hr>
<br>
<pre>public class <span class="typeNameLabel">HttpConstraintElement</span>
extends java.lang.Object</pre>
<div class="block">Java Class representation of an <a href="../../javax/servlet/annotation/HttpConstraint.html" title="annotation in javax.servlet.annotation"><code>HttpConstraint</code></a> annotation value.</div>
<dl>
<dt><span class="simpleTagLabel">Since:</span></dt>
<dd>Servlet 3.0</dd>
</dl>
</li>
</ul>
</div>
<div class="summary">
<ul class="blockList">
<li class="blockList">
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<ul class="blockList">
<li class="blockList"><a name="constructor.summary">
<!--   -->
</a>
<h3>Constructor Summary</h3>
<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colOne" scope="col">Constructor and Description</th>
</tr>
<tr class="altColor">
<td class="colOne"><code><span class="memberNameLink"><a href="../../javax/servlet/HttpConstraintElement.html#HttpConstraintElement--">HttpConstraintElement</a></span>()</code>
<div class="block">Constructs a default HTTP constraint element</div>
</td>
</tr>
<tr class="rowColor">
<td class="colOne"><code><span class="memberNameLink"><a href="../../javax/servlet/HttpConstraintElement.html#HttpConstraintElement-javax.servlet.annotation.ServletSecurity.EmptyRoleSemantic-">HttpConstraintElement</a></span>(<a href="../../javax/servlet/annotation/ServletSecurity.EmptyRoleSemantic.html" title="enum in javax.servlet.annotation">ServletSecurity.EmptyRoleSemantic</a>&nbsp;semantic)</code>
<div class="block">Convenience constructor to establish <tt>EmptyRoleSemantic.DENY</tt></div>
</td>
</tr>
<tr class="altColor">
<td class="colOne"><code><span class="memberNameLink"><a href="../../javax/servlet/HttpConstraintElement.html#HttpConstraintElement-javax.servlet.annotation.ServletSecurity.EmptyRoleSemantic-javax.servlet.annotation.ServletSecurity.TransportGuarantee-java.lang.String...-">HttpConstraintElement</a></span>(<a href="../../javax/servlet/annotation/ServletSecurity.EmptyRoleSemantic.html" title="enum in javax.servlet.annotation">ServletSecurity.EmptyRoleSemantic</a>&nbsp;semantic,
                     <a href="../../javax/servlet/annotation/ServletSecurity.TransportGuarantee.html" title="enum in javax.servlet.annotation">ServletSecurity.TransportGuarantee</a>&nbsp;guarantee,
                     java.lang.String...&nbsp;roleNames)</code>
<div class="block">Constructor to establish all of getEmptyRoleSemantic,
 getRolesAllowed, and getTransportGuarantee.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colOne"><code><span class="memberNameLink"><a href="../../javax/servlet/HttpConstraintElement.html#HttpConstraintElement-javax.servlet.annotation.ServletSecurity.TransportGuarantee-java.lang.String...-">HttpConstraintElement</a></span>(<a href="../../javax/servlet/annotation/ServletSecurity.TransportGuarantee.html" title="enum in javax.servlet.annotation">ServletSecurity.TransportGuarantee</a>&nbsp;guarantee,
                     java.lang.String...&nbsp;roleNames)</code>
<div class="block">Constructor to establish non-empty getRolesAllowed and/or
 <tt>TransportGuarantee.CONFIDENTIAL</tt>.</div>
</td>
</tr>
</table>
</li>
</ul>
<!-- ========== METHOD SUMMARY =========== -->
<ul class="blockList">
<li class="blockList"><a name="method.summary">
<!--   -->
</a>
<h3>Method Summary</h3>
<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colLast" scope="col">Method and Description</th>
</tr>
<tr id="i0" class="altColor">
<td class="colFirst"><code><a href="../../javax/servlet/annotation/ServletSecurity.EmptyRoleSemantic.html" title="enum in javax.servlet.annotation">ServletSecurity.EmptyRoleSemantic</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../javax/servlet/HttpConstraintElement.html#getEmptyRoleSemantic--">getEmptyRoleSemantic</a></span>()</code>
<div class="block">Gets the default authorization semantic.</div>
</td>
</tr>
<tr id="i1" class="rowColor">
<td class="colFirst"><code>java.lang.String[]</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../javax/servlet/HttpConstraintElement.html#getRolesAllowed--">getRolesAllowed</a></span>()</code>
<div class="block">Gets the names of the authorized roles.</div>
</td>
</tr>
<tr id="i2" class="altColor">
<td class="colFirst"><code><a href="../../javax/servlet/annotation/ServletSecurity.TransportGuarantee.html" title="enum in javax.servlet.annotation">ServletSecurity.TransportGuarantee</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../javax/servlet/HttpConstraintElement.html#getTransportGuarantee--">getTransportGuarantee</a></span>()</code>
<div class="block">Gets the data protection requirement (i.e., whether or not SSL/TLS is
 required) that must be satisfied by the transport connection.</div>
</td>
</tr>
</table>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
<!--   -->
</a>
<h3>Methods inherited from class&nbsp;java.lang.Object</h3>
<code>clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
<div class="details">
<ul class="blockList">
<li class="blockList">
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<ul class="blockList">
<li class="blockList"><a name="constructor.detail">
<!--   -->
</a>
<h3>Constructor Detail</h3>
<a name="HttpConstraintElement--">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>HttpConstraintElement</h4>
<pre>public&nbsp;HttpConstraintElement()</pre>
<div class="block">Constructs a default HTTP constraint element</div>
</li>
</ul>
<a name="HttpConstraintElement-javax.servlet.annotation.ServletSecurity.EmptyRoleSemantic-">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>HttpConstraintElement</h4>
<pre>public&nbsp;HttpConstraintElement(<a href="../../javax/servlet/annotation/ServletSecurity.EmptyRoleSemantic.html" title="enum in javax.servlet.annotation">ServletSecurity.EmptyRoleSemantic</a>&nbsp;semantic)</pre>
<div class="block">Convenience constructor to establish <tt>EmptyRoleSemantic.DENY</tt></div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>semantic</code> - should be EmptyRoleSemantic.DENY</dd>
</dl>
</li>
</ul>
<a name="HttpConstraintElement-javax.servlet.annotation.ServletSecurity.TransportGuarantee-java.lang.String...-">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>HttpConstraintElement</h4>
<pre>public&nbsp;HttpConstraintElement(<a href="../../javax/servlet/annotation/ServletSecurity.TransportGuarantee.html" title="enum in javax.servlet.annotation">ServletSecurity.TransportGuarantee</a>&nbsp;guarantee,
                             java.lang.String...&nbsp;roleNames)</pre>
<div class="block">Constructor to establish non-empty getRolesAllowed and/or
 <tt>TransportGuarantee.CONFIDENTIAL</tt>.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>guarantee</code> - <tt>TransportGuarantee.NONE</tt> or
 <tt>TransportGuarantee.CONFIDENTIAL</tt></dd>
<dd><code>roleNames</code> - the names of the roles that are to be
 allowed access</dd>
</dl>
</li>
</ul>
<a name="HttpConstraintElement-javax.servlet.annotation.ServletSecurity.EmptyRoleSemantic-javax.servlet.annotation.ServletSecurity.TransportGuarantee-java.lang.String...-">
<!--   -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>HttpConstraintElement</h4>
<pre>public&nbsp;HttpConstraintElement(<a href="../../javax/servlet/annotation/ServletSecurity.EmptyRoleSemantic.html" title="enum in javax.servlet.annotation">ServletSecurity.EmptyRoleSemantic</a>&nbsp;semantic,
                             <a href="../../javax/servlet/annotation/ServletSecurity.TransportGuarantee.html" title="enum in javax.servlet.annotation">ServletSecurity.TransportGuarantee</a>&nbsp;guarantee,
                             java.lang.String...&nbsp;roleNames)</pre>
<div class="block">Constructor to establish all of getEmptyRoleSemantic,
 getRolesAllowed, and getTransportGuarantee.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>semantic</code> - <tt>EmptyRoleSemantic.DENY</tt> or
 <tt>EmptyRoleSemantic.PERMIT</tt></dd>
<dd><code>guarantee</code> - <tt>TransportGuarantee.NONE</tt> or
 <tt>TransportGuarantee.CONFIDENTIAL</tt></dd>
<dd><code>roleNames</code> - the names of the roles that are to be allowed
 access, or missing if the semantic is <tt>EmptyRoleSemantic.DENY</tt></dd>
</dl>
</li>
</ul>
</li>
</ul>
<!-- ============ METHOD DETAIL ========== -->
<ul class="blockList">
<li class="blockList"><a name="method.detail">
<!--   -->
</a>
<h3>Method Detail</h3>
<a name="getEmptyRoleSemantic--">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getEmptyRoleSemantic</h4>
<pre>public&nbsp;<a href="../../javax/servlet/annotation/ServletSecurity.EmptyRoleSemantic.html" title="enum in javax.servlet.annotation">ServletSecurity.EmptyRoleSemantic</a>&nbsp;getEmptyRoleSemantic()</pre>
<div class="block">Gets the default authorization semantic.

 <p>This value is insignificant when <code>getRolesAllowed</code>
 returns a non-empty array, and should not be specified when a
 non-empty array is specified for <tt>getRolesAllowed</tt>.</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the <a href="../../javax/servlet/annotation/ServletSecurity.EmptyRoleSemantic.html" title="enum in javax.servlet.annotation"><code>ServletSecurity.EmptyRoleSemantic</code></a> to be applied when
 <code>getRolesAllowed</code> returns an empty (that is, zero-length)
 array</dd>
</dl>
</li>
</ul>
<a name="getTransportGuarantee--">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getTransportGuarantee</h4>
<pre>public&nbsp;<a href="../../javax/servlet/annotation/ServletSecurity.TransportGuarantee.html" title="enum in javax.servlet.annotation">ServletSecurity.TransportGuarantee</a>&nbsp;getTransportGuarantee()</pre>
<div class="block">Gets the data protection requirement (i.e., whether or not SSL/TLS is
 required) that must be satisfied by the transport connection.</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the <a href="../../javax/servlet/annotation/ServletSecurity.TransportGuarantee.html" title="enum in javax.servlet.annotation"><code>ServletSecurity.TransportGuarantee</code></a> indicating the data
 protection that must be provided by the connection</dd>
</dl>
</li>
</ul>
<a name="getRolesAllowed--">
<!--   -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>getRolesAllowed</h4>
<pre>public&nbsp;java.lang.String[]&nbsp;getRolesAllowed()</pre>
<div class="block">Gets the names of the authorized roles.

 <p>Duplicate role names appearing in getRolesAllowed are insignificant
 and may be discarded. The String <tt>"*"</tt> has no special meaning
 as a role name (should it occur in getRolesAllowed).</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>a (possibly empty) array of role names. When the
 array is empty, its meaning depends on the value of
 <a href="../../javax/servlet/HttpConstraintElement.html#getEmptyRoleSemantic--"><code>getEmptyRoleSemantic()</code></a>. If its value is <tt>DENY</tt>,
 and <code>getRolesAllowed</code> returns an empty array,
 access is to be denied independent of authentication state and
 identity. Conversely, if its value is <code>PERMIT</code>, it
 indicates that access is to be allowed independent of authentication
 state and identity. When the array contains the names of one or
 more roles, it indicates that access is contingent on membership in at
 least one of the named roles (independent of the value of
 <a href="../../javax/servlet/HttpConstraintElement.html#getEmptyRoleSemantic--"><code>getEmptyRoleSemantic()</code></a>).</dd>
</dl>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
</div>
<!-- ========= END OF CLASS DATA ========= -->
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a name="navbar.bottom">
<!--   -->
</a>
<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
<a name="navbar.bottom.firstrow">
<!--   -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../overview-summary.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../index-all.html">Index</a></li>
<li><a href="../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li><a href="../../javax/servlet/GenericServlet.html" title="class in javax.servlet"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../javax/servlet/HttpMethodConstraintElement.html" title="class in javax.servlet"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../index.html?javax/servlet/HttpConstraintElement.html" target="_top">Frames</a></li>
<li><a href="HttpConstraintElement.html" target="_top">No&nbsp;Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_bottom">
<li><a href="../../allclasses-noframe.html">All&nbsp;Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
  allClassesLink = document.getElementById("allclasses_navbar_bottom");
  if(window==top) {
    allClassesLink.style.display = "block";
  }
  else {
    allClassesLink.style.display = "none";
  }
  //-->
</script>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a name="skip.navbar.bottom">
<!--   -->
</a></div>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
</body>
</html>
