<!DOCTYPE HTML>
<html lang="en">
<head>
<title>Source code</title>
<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
</head>
<body>
<main role="main">
<div class="sourceContainer">
<pre><span class="sourceLineNo">001</span><a id="line.1">/*</a>
<span class="sourceLineNo">002</span><a id="line.2"> * Licensed to the Apache Software Foundation (ASF) under one</a>
<span class="sourceLineNo">003</span><a id="line.3"> * or more contributor license agreements.  See the NOTICE file</a>
<span class="sourceLineNo">004</span><a id="line.4"> * distributed with this work for additional information</a>
<span class="sourceLineNo">005</span><a id="line.5"> * regarding copyright ownership.  The ASF licenses this file</a>
<span class="sourceLineNo">006</span><a id="line.6"> * to you under the Apache License, Version 2.0 (the</a>
<span class="sourceLineNo">007</span><a id="line.7"> * "License"); you may not use this file except in compliance</a>
<span class="sourceLineNo">008</span><a id="line.8"> * with the License.  You may obtain a copy of the License at</a>
<span class="sourceLineNo">009</span><a id="line.9"> *</a>
<span class="sourceLineNo">010</span><a id="line.10"> *     http://www.apache.org/licenses/LICENSE-2.0</a>
<span class="sourceLineNo">011</span><a id="line.11"> *</a>
<span class="sourceLineNo">012</span><a id="line.12"> * Unless required by applicable law or agreed to in writing,</a>
<span class="sourceLineNo">013</span><a id="line.13"> * software distributed under the License is distributed on an</a>
<span class="sourceLineNo">014</span><a id="line.14"> * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY</a>
<span class="sourceLineNo">015</span><a id="line.15"> * KIND, either express or implied.  See the License for the</a>
<span class="sourceLineNo">016</span><a id="line.16"> * specific language governing permissions and limitations</a>
<span class="sourceLineNo">017</span><a id="line.17"> * under the License.</a>
<span class="sourceLineNo">018</span><a id="line.18"> */</a>
<span class="sourceLineNo">019</span><a id="line.19">package org.apache.shiro.cas;</a>
<span class="sourceLineNo">020</span><a id="line.20"></a>
<span class="sourceLineNo">021</span><a id="line.21">import org.apache.shiro.authc.AuthenticationException;</a>
<span class="sourceLineNo">022</span><a id="line.22">import org.apache.shiro.authc.AuthenticationInfo;</a>
<span class="sourceLineNo">023</span><a id="line.23">import org.apache.shiro.authc.AuthenticationToken;</a>
<span class="sourceLineNo">024</span><a id="line.24">import org.apache.shiro.authc.SimpleAuthenticationInfo;</a>
<span class="sourceLineNo">025</span><a id="line.25">import org.apache.shiro.authz.AuthorizationInfo;</a>
<span class="sourceLineNo">026</span><a id="line.26">import org.apache.shiro.authz.SimpleAuthorizationInfo;</a>
<span class="sourceLineNo">027</span><a id="line.27">import org.apache.shiro.realm.AuthorizingRealm;</a>
<span class="sourceLineNo">028</span><a id="line.28">import org.apache.shiro.subject.PrincipalCollection;</a>
<span class="sourceLineNo">029</span><a id="line.29">import org.apache.shiro.subject.SimplePrincipalCollection;</a>
<span class="sourceLineNo">030</span><a id="line.30">import org.apache.shiro.util.CollectionUtils;</a>
<span class="sourceLineNo">031</span><a id="line.31">import org.apache.shiro.util.StringUtils;</a>
<span class="sourceLineNo">032</span><a id="line.32">import org.jasig.cas.client.authentication.AttributePrincipal;</a>
<span class="sourceLineNo">033</span><a id="line.33">import org.jasig.cas.client.validation.*;</a>
<span class="sourceLineNo">034</span><a id="line.34">import org.slf4j.Logger;</a>
<span class="sourceLineNo">035</span><a id="line.35">import org.slf4j.LoggerFactory;</a>
<span class="sourceLineNo">036</span><a id="line.36"></a>
<span class="sourceLineNo">037</span><a id="line.37">import java.util.ArrayList;</a>
<span class="sourceLineNo">038</span><a id="line.38">import java.util.List;</a>
<span class="sourceLineNo">039</span><a id="line.39">import java.util.Map;</a>
<span class="sourceLineNo">040</span><a id="line.40"></a>
<span class="sourceLineNo">041</span><a id="line.41">/**</a>
<span class="sourceLineNo">042</span><a id="line.42"> * This realm implementation acts as a CAS client to a CAS server for authentication and basic authorization.</a>
<span class="sourceLineNo">043</span><a id="line.43"> * &lt;p/&gt;</a>
<span class="sourceLineNo">044</span><a id="line.44"> * This realm functions by inspecting a submitted {@link org.apache.shiro.cas.CasToken CasToken} (which essentially </a>
<span class="sourceLineNo">045</span><a id="line.45"> * wraps a CAS service ticket) and validates it against the CAS server using a configured CAS</a>
<span class="sourceLineNo">046</span><a id="line.46"> * {@link org.jasig.cas.client.validation.TicketValidator TicketValidator}.</a>
<span class="sourceLineNo">047</span><a id="line.47"> * &lt;p/&gt;</a>
<span class="sourceLineNo">048</span><a id="line.48"> * The {@link #getValidationProtocol() validationProtocol} is {@code CAS} by default, which indicates that a</a>
<span class="sourceLineNo">049</span><a id="line.49"> * a {@link org.jasig.cas.client.validation.Cas20ServiceTicketValidator Cas20ServiceTicketValidator}</a>
<span class="sourceLineNo">050</span><a id="line.50"> * will be used for ticket validation.  You can alternatively set</a>
<span class="sourceLineNo">051</span><a id="line.51"> * or {@link org.jasig.cas.client.validation.Saml11TicketValidator Saml11TicketValidator} of CAS client. It is based on</a>
<span class="sourceLineNo">052</span><a id="line.52"> * {@link AuthorizingRealm AuthorizingRealm} for both authentication and authorization. User id and attributes are retrieved from the CAS</a>
<span class="sourceLineNo">053</span><a id="line.53"> * service ticket validation response during authentication phase. Roles and permissions are computed during authorization phase (according</a>
<span class="sourceLineNo">054</span><a id="line.54"> * to the attributes previously retrieved).</a>
<span class="sourceLineNo">055</span><a id="line.55"> *</a>
<span class="sourceLineNo">056</span><a id="line.56"> * @since 1.2</a>
<span class="sourceLineNo">057</span><a id="line.57"> * @see &lt;a href="https://github.com/bujiio/buji-pac4j"&gt;buji-pac4j&lt;/a&gt;</a>
<span class="sourceLineNo">058</span><a id="line.58"> * @deprecated replaced with Shiro integration in &lt;a href="https://github.com/bujiio/buji-pac4j"&gt;buji-pac4j&lt;/a&gt;.</a>
<span class="sourceLineNo">059</span><a id="line.59"> */</a>
<span class="sourceLineNo">060</span><a id="line.60">@Deprecated</a>
<span class="sourceLineNo">061</span><a id="line.61">public class CasRealm extends AuthorizingRealm {</a>
<span class="sourceLineNo">062</span><a id="line.62"></a>
<span class="sourceLineNo">063</span><a id="line.63">    // default name of the CAS attribute for remember me authentication (CAS 3.4.10+)</a>
<span class="sourceLineNo">064</span><a id="line.64">    public static final String DEFAULT_REMEMBER_ME_ATTRIBUTE_NAME = "longTermAuthenticationRequestTokenUsed";</a>
<span class="sourceLineNo">065</span><a id="line.65">    public static final String DEFAULT_VALIDATION_PROTOCOL = "CAS";</a>
<span class="sourceLineNo">066</span><a id="line.66">    </a>
<span class="sourceLineNo">067</span><a id="line.67">    private static Logger log = LoggerFactory.getLogger(CasRealm.class);</a>
<span class="sourceLineNo">068</span><a id="line.68">    </a>
<span class="sourceLineNo">069</span><a id="line.69">    // this is the url of the CAS server (example : http://host:port/cas)</a>
<span class="sourceLineNo">070</span><a id="line.70">    private String casServerUrlPrefix;</a>
<span class="sourceLineNo">071</span><a id="line.71">    </a>
<span class="sourceLineNo">072</span><a id="line.72">    // this is the CAS service url of the application (example : http://host:port/mycontextpath/shiro-cas)</a>
<span class="sourceLineNo">073</span><a id="line.73">    private String casService;</a>
<span class="sourceLineNo">074</span><a id="line.74">    </a>
<span class="sourceLineNo">075</span><a id="line.75">    /* CAS protocol to use for ticket validation : CAS (default) or SAML :</a>
<span class="sourceLineNo">076</span><a id="line.76">       - CAS protocol can be used with CAS server version &lt; 3.1 : in this case, no user attributes can be retrieved from the CAS ticket validation response (except if there are some customizations on CAS server side)</a>
<span class="sourceLineNo">077</span><a id="line.77">       - SAML protocol can be used with CAS server version &gt;= 3.1 : in this case, user attributes can be extracted from the CAS ticket validation response</a>
<span class="sourceLineNo">078</span><a id="line.78">    */</a>
<span class="sourceLineNo">079</span><a id="line.79">    private String validationProtocol = DEFAULT_VALIDATION_PROTOCOL;</a>
<span class="sourceLineNo">080</span><a id="line.80">    </a>
<span class="sourceLineNo">081</span><a id="line.81">    // default name of the CAS attribute for remember me authentication (CAS 3.4.10+)</a>
<span class="sourceLineNo">082</span><a id="line.82">    private String rememberMeAttributeName = DEFAULT_REMEMBER_ME_ATTRIBUTE_NAME;</a>
<span class="sourceLineNo">083</span><a id="line.83">    </a>
<span class="sourceLineNo">084</span><a id="line.84">    // this class from the CAS client is used to validate a service ticket on CAS server</a>
<span class="sourceLineNo">085</span><a id="line.85">    private TicketValidator ticketValidator;</a>
<span class="sourceLineNo">086</span><a id="line.86">    </a>
<span class="sourceLineNo">087</span><a id="line.87">    // default roles to applied to authenticated user</a>
<span class="sourceLineNo">088</span><a id="line.88">    private String defaultRoles;</a>
<span class="sourceLineNo">089</span><a id="line.89">    </a>
<span class="sourceLineNo">090</span><a id="line.90">    // default permissions to applied to authenticated user</a>
<span class="sourceLineNo">091</span><a id="line.91">    private String defaultPermissions;</a>
<span class="sourceLineNo">092</span><a id="line.92">    </a>
<span class="sourceLineNo">093</span><a id="line.93">    // names of attributes containing roles</a>
<span class="sourceLineNo">094</span><a id="line.94">    private String roleAttributeNames;</a>
<span class="sourceLineNo">095</span><a id="line.95">    </a>
<span class="sourceLineNo">096</span><a id="line.96">    // names of attributes containing permissions</a>
<span class="sourceLineNo">097</span><a id="line.97">    private String permissionAttributeNames;</a>
<span class="sourceLineNo">098</span><a id="line.98">    </a>
<span class="sourceLineNo">099</span><a id="line.99">    public CasRealm() {</a>
<span class="sourceLineNo">100</span><a id="line.100">        setAuthenticationTokenClass(CasToken.class);</a>
<span class="sourceLineNo">101</span><a id="line.101">    }</a>
<span class="sourceLineNo">102</span><a id="line.102"></a>
<span class="sourceLineNo">103</span><a id="line.103">    @Override</a>
<span class="sourceLineNo">104</span><a id="line.104">    protected void onInit() {</a>
<span class="sourceLineNo">105</span><a id="line.105">        super.onInit();</a>
<span class="sourceLineNo">106</span><a id="line.106">        ensureTicketValidator();</a>
<span class="sourceLineNo">107</span><a id="line.107">    }</a>
<span class="sourceLineNo">108</span><a id="line.108"></a>
<span class="sourceLineNo">109</span><a id="line.109">    protected TicketValidator ensureTicketValidator() {</a>
<span class="sourceLineNo">110</span><a id="line.110">        if (this.ticketValidator == null) {</a>
<span class="sourceLineNo">111</span><a id="line.111">            this.ticketValidator = createTicketValidator();</a>
<span class="sourceLineNo">112</span><a id="line.112">        }</a>
<span class="sourceLineNo">113</span><a id="line.113">        return this.ticketValidator;</a>
<span class="sourceLineNo">114</span><a id="line.114">    }</a>
<span class="sourceLineNo">115</span><a id="line.115">    </a>
<span class="sourceLineNo">116</span><a id="line.116">    protected TicketValidator createTicketValidator() {</a>
<span class="sourceLineNo">117</span><a id="line.117">        String urlPrefix = getCasServerUrlPrefix();</a>
<span class="sourceLineNo">118</span><a id="line.118">        if ("saml".equalsIgnoreCase(getValidationProtocol())) {</a>
<span class="sourceLineNo">119</span><a id="line.119">            return new Saml11TicketValidator(urlPrefix);</a>
<span class="sourceLineNo">120</span><a id="line.120">        }</a>
<span class="sourceLineNo">121</span><a id="line.121">        return new Cas20ServiceTicketValidator(urlPrefix);</a>
<span class="sourceLineNo">122</span><a id="line.122">    }</a>
<span class="sourceLineNo">123</span><a id="line.123">    </a>
<span class="sourceLineNo">124</span><a id="line.124">    /**</a>
<span class="sourceLineNo">125</span><a id="line.125">     * Authenticates a user and retrieves its information.</a>
<span class="sourceLineNo">126</span><a id="line.126">     * </a>
<span class="sourceLineNo">127</span><a id="line.127">     * @param token the authentication token</a>
<span class="sourceLineNo">128</span><a id="line.128">     * @throws AuthenticationException if there is an error during authentication.</a>
<span class="sourceLineNo">129</span><a id="line.129">     */</a>
<span class="sourceLineNo">130</span><a id="line.130">    @Override</a>
<span class="sourceLineNo">131</span><a id="line.131">    @SuppressWarnings("unchecked")</a>
<span class="sourceLineNo">132</span><a id="line.132">    protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {</a>
<span class="sourceLineNo">133</span><a id="line.133">        CasToken casToken = (CasToken) token;</a>
<span class="sourceLineNo">134</span><a id="line.134">        if (token == null) {</a>
<span class="sourceLineNo">135</span><a id="line.135">            return null;</a>
<span class="sourceLineNo">136</span><a id="line.136">        }</a>
<span class="sourceLineNo">137</span><a id="line.137">        </a>
<span class="sourceLineNo">138</span><a id="line.138">        String ticket = (String)casToken.getCredentials();</a>
<span class="sourceLineNo">139</span><a id="line.139">        if (!StringUtils.hasText(ticket)) {</a>
<span class="sourceLineNo">140</span><a id="line.140">            return null;</a>
<span class="sourceLineNo">141</span><a id="line.141">        }</a>
<span class="sourceLineNo">142</span><a id="line.142">        </a>
<span class="sourceLineNo">143</span><a id="line.143">        TicketValidator ticketValidator = ensureTicketValidator();</a>
<span class="sourceLineNo">144</span><a id="line.144"></a>
<span class="sourceLineNo">145</span><a id="line.145">        try {</a>
<span class="sourceLineNo">146</span><a id="line.146">            // contact CAS server to validate service ticket</a>
<span class="sourceLineNo">147</span><a id="line.147">            Assertion casAssertion = ticketValidator.validate(ticket, getCasService());</a>
<span class="sourceLineNo">148</span><a id="line.148">            // get principal, user id and attributes</a>
<span class="sourceLineNo">149</span><a id="line.149">            AttributePrincipal casPrincipal = casAssertion.getPrincipal();</a>
<span class="sourceLineNo">150</span><a id="line.150">            String userId = casPrincipal.getName();</a>
<span class="sourceLineNo">151</span><a id="line.151">            log.debug("Validate ticket : {} in CAS server : {} to retrieve user : {}", new Object[]{</a>
<span class="sourceLineNo">152</span><a id="line.152">                    ticket, getCasServerUrlPrefix(), userId</a>
<span class="sourceLineNo">153</span><a id="line.153">            });</a>
<span class="sourceLineNo">154</span><a id="line.154"></a>
<span class="sourceLineNo">155</span><a id="line.155">            Map&lt;String, Object&gt; attributes = casPrincipal.getAttributes();</a>
<span class="sourceLineNo">156</span><a id="line.156">            // refresh authentication token (user id + remember me)</a>
<span class="sourceLineNo">157</span><a id="line.157">            casToken.setUserId(userId);</a>
<span class="sourceLineNo">158</span><a id="line.158">            String rememberMeAttributeName = getRememberMeAttributeName();</a>
<span class="sourceLineNo">159</span><a id="line.159">            String rememberMeStringValue = (String)attributes.get(rememberMeAttributeName);</a>
<span class="sourceLineNo">160</span><a id="line.160">            boolean isRemembered = rememberMeStringValue != null &amp;&amp; Boolean.parseBoolean(rememberMeStringValue);</a>
<span class="sourceLineNo">161</span><a id="line.161">            if (isRemembered) {</a>
<span class="sourceLineNo">162</span><a id="line.162">                casToken.setRememberMe(true);</a>
<span class="sourceLineNo">163</span><a id="line.163">            }</a>
<span class="sourceLineNo">164</span><a id="line.164">            // create simple authentication info</a>
<span class="sourceLineNo">165</span><a id="line.165">            List&lt;Object&gt; principals = CollectionUtils.asList(userId, attributes);</a>
<span class="sourceLineNo">166</span><a id="line.166">            PrincipalCollection principalCollection = new SimplePrincipalCollection(principals, getName());</a>
<span class="sourceLineNo">167</span><a id="line.167">            return new SimpleAuthenticationInfo(principalCollection, ticket);</a>
<span class="sourceLineNo">168</span><a id="line.168">        } catch (TicketValidationException e) { </a>
<span class="sourceLineNo">169</span><a id="line.169">            throw new CasAuthenticationException("Unable to validate ticket [" + ticket + "]", e);</a>
<span class="sourceLineNo">170</span><a id="line.170">        }</a>
<span class="sourceLineNo">171</span><a id="line.171">    }</a>
<span class="sourceLineNo">172</span><a id="line.172">    </a>
<span class="sourceLineNo">173</span><a id="line.173">    /**</a>
<span class="sourceLineNo">174</span><a id="line.174">     * Retrieves the AuthorizationInfo for the given principals (the CAS previously authenticated user : id + attributes).</a>
<span class="sourceLineNo">175</span><a id="line.175">     * </a>
<span class="sourceLineNo">176</span><a id="line.176">     * @param principals the primary identifying principals of the AuthorizationInfo that should be retrieved.</a>
<span class="sourceLineNo">177</span><a id="line.177">     * @return the AuthorizationInfo associated with this principals.</a>
<span class="sourceLineNo">178</span><a id="line.178">     */</a>
<span class="sourceLineNo">179</span><a id="line.179">    @Override</a>
<span class="sourceLineNo">180</span><a id="line.180">    @SuppressWarnings("unchecked")</a>
<span class="sourceLineNo">181</span><a id="line.181">    protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {</a>
<span class="sourceLineNo">182</span><a id="line.182">        // retrieve user information</a>
<span class="sourceLineNo">183</span><a id="line.183">        SimplePrincipalCollection principalCollection = (SimplePrincipalCollection) principals;</a>
<span class="sourceLineNo">184</span><a id="line.184">        List&lt;Object&gt; listPrincipals = principalCollection.asList();</a>
<span class="sourceLineNo">185</span><a id="line.185">        Map&lt;String, String&gt; attributes = (Map&lt;String, String&gt;) listPrincipals.get(1);</a>
<span class="sourceLineNo">186</span><a id="line.186">        // create simple authorization info</a>
<span class="sourceLineNo">187</span><a id="line.187">        SimpleAuthorizationInfo simpleAuthorizationInfo = new SimpleAuthorizationInfo();</a>
<span class="sourceLineNo">188</span><a id="line.188">        // add default roles</a>
<span class="sourceLineNo">189</span><a id="line.189">        addRoles(simpleAuthorizationInfo, split(defaultRoles));</a>
<span class="sourceLineNo">190</span><a id="line.190">        // add default permissions</a>
<span class="sourceLineNo">191</span><a id="line.191">        addPermissions(simpleAuthorizationInfo, split(defaultPermissions));</a>
<span class="sourceLineNo">192</span><a id="line.192">        // get roles from attributes</a>
<span class="sourceLineNo">193</span><a id="line.193">        List&lt;String&gt; attributeNames = split(roleAttributeNames);</a>
<span class="sourceLineNo">194</span><a id="line.194">        for (String attributeName : attributeNames) {</a>
<span class="sourceLineNo">195</span><a id="line.195">            String value = attributes.get(attributeName);</a>
<span class="sourceLineNo">196</span><a id="line.196">            addRoles(simpleAuthorizationInfo, split(value));</a>
<span class="sourceLineNo">197</span><a id="line.197">        }</a>
<span class="sourceLineNo">198</span><a id="line.198">        // get permissions from attributes</a>
<span class="sourceLineNo">199</span><a id="line.199">        attributeNames = split(permissionAttributeNames);</a>
<span class="sourceLineNo">200</span><a id="line.200">        for (String attributeName : attributeNames) {</a>
<span class="sourceLineNo">201</span><a id="line.201">            String value = attributes.get(attributeName);</a>
<span class="sourceLineNo">202</span><a id="line.202">            addPermissions(simpleAuthorizationInfo, split(value));</a>
<span class="sourceLineNo">203</span><a id="line.203">        }</a>
<span class="sourceLineNo">204</span><a id="line.204">        return simpleAuthorizationInfo;</a>
<span class="sourceLineNo">205</span><a id="line.205">    }</a>
<span class="sourceLineNo">206</span><a id="line.206">    </a>
<span class="sourceLineNo">207</span><a id="line.207">    /**</a>
<span class="sourceLineNo">208</span><a id="line.208">     * Split a string into a list of not empty and trimmed strings, delimiter is a comma.</a>
<span class="sourceLineNo">209</span><a id="line.209">     * </a>
<span class="sourceLineNo">210</span><a id="line.210">     * @param s the input string</a>
<span class="sourceLineNo">211</span><a id="line.211">     * @return the list of not empty and trimmed strings</a>
<span class="sourceLineNo">212</span><a id="line.212">     */</a>
<span class="sourceLineNo">213</span><a id="line.213">    private List&lt;String&gt; split(String s) {</a>
<span class="sourceLineNo">214</span><a id="line.214">        List&lt;String&gt; list = new ArrayList&lt;String&gt;();</a>
<span class="sourceLineNo">215</span><a id="line.215">        String[] elements = StringUtils.split(s, ',');</a>
<span class="sourceLineNo">216</span><a id="line.216">        if (elements != null &amp;&amp; elements.length &gt; 0) {</a>
<span class="sourceLineNo">217</span><a id="line.217">            for (String element : elements) {</a>
<span class="sourceLineNo">218</span><a id="line.218">                if (StringUtils.hasText(element)) {</a>
<span class="sourceLineNo">219</span><a id="line.219">                    list.add(element.trim());</a>
<span class="sourceLineNo">220</span><a id="line.220">                }</a>
<span class="sourceLineNo">221</span><a id="line.221">            }</a>
<span class="sourceLineNo">222</span><a id="line.222">        }</a>
<span class="sourceLineNo">223</span><a id="line.223">        return list;</a>
<span class="sourceLineNo">224</span><a id="line.224">    }</a>
<span class="sourceLineNo">225</span><a id="line.225">    </a>
<span class="sourceLineNo">226</span><a id="line.226">    /**</a>
<span class="sourceLineNo">227</span><a id="line.227">     * Add roles to the simple authorization info.</a>
<span class="sourceLineNo">228</span><a id="line.228">     * </a>
<span class="sourceLineNo">229</span><a id="line.229">     * @param simpleAuthorizationInfo</a>
<span class="sourceLineNo">230</span><a id="line.230">     * @param roles the list of roles to add</a>
<span class="sourceLineNo">231</span><a id="line.231">     */</a>
<span class="sourceLineNo">232</span><a id="line.232">    private void addRoles(SimpleAuthorizationInfo simpleAuthorizationInfo, List&lt;String&gt; roles) {</a>
<span class="sourceLineNo">233</span><a id="line.233">        for (String role : roles) {</a>
<span class="sourceLineNo">234</span><a id="line.234">            simpleAuthorizationInfo.addRole(role);</a>
<span class="sourceLineNo">235</span><a id="line.235">        }</a>
<span class="sourceLineNo">236</span><a id="line.236">    }</a>
<span class="sourceLineNo">237</span><a id="line.237">    </a>
<span class="sourceLineNo">238</span><a id="line.238">    /**</a>
<span class="sourceLineNo">239</span><a id="line.239">     * Add permissions to the simple authorization info.</a>
<span class="sourceLineNo">240</span><a id="line.240">     * </a>
<span class="sourceLineNo">241</span><a id="line.241">     * @param simpleAuthorizationInfo</a>
<span class="sourceLineNo">242</span><a id="line.242">     * @param permissions the list of permissions to add</a>
<span class="sourceLineNo">243</span><a id="line.243">     */</a>
<span class="sourceLineNo">244</span><a id="line.244">    private void addPermissions(SimpleAuthorizationInfo simpleAuthorizationInfo, List&lt;String&gt; permissions) {</a>
<span class="sourceLineNo">245</span><a id="line.245">        for (String permission : permissions) {</a>
<span class="sourceLineNo">246</span><a id="line.246">            simpleAuthorizationInfo.addStringPermission(permission);</a>
<span class="sourceLineNo">247</span><a id="line.247">        }</a>
<span class="sourceLineNo">248</span><a id="line.248">    }</a>
<span class="sourceLineNo">249</span><a id="line.249"></a>
<span class="sourceLineNo">250</span><a id="line.250">    public String getCasServerUrlPrefix() {</a>
<span class="sourceLineNo">251</span><a id="line.251">        return casServerUrlPrefix;</a>
<span class="sourceLineNo">252</span><a id="line.252">    }</a>
<span class="sourceLineNo">253</span><a id="line.253"></a>
<span class="sourceLineNo">254</span><a id="line.254">    public void setCasServerUrlPrefix(String casServerUrlPrefix) {</a>
<span class="sourceLineNo">255</span><a id="line.255">        this.casServerUrlPrefix = casServerUrlPrefix;</a>
<span class="sourceLineNo">256</span><a id="line.256">    }</a>
<span class="sourceLineNo">257</span><a id="line.257"></a>
<span class="sourceLineNo">258</span><a id="line.258">    public String getCasService() {</a>
<span class="sourceLineNo">259</span><a id="line.259">        return casService;</a>
<span class="sourceLineNo">260</span><a id="line.260">    }</a>
<span class="sourceLineNo">261</span><a id="line.261"></a>
<span class="sourceLineNo">262</span><a id="line.262">    public void setCasService(String casService) {</a>
<span class="sourceLineNo">263</span><a id="line.263">        this.casService = casService;</a>
<span class="sourceLineNo">264</span><a id="line.264">    }</a>
<span class="sourceLineNo">265</span><a id="line.265"></a>
<span class="sourceLineNo">266</span><a id="line.266">    public String getValidationProtocol() {</a>
<span class="sourceLineNo">267</span><a id="line.267">        return validationProtocol;</a>
<span class="sourceLineNo">268</span><a id="line.268">    }</a>
<span class="sourceLineNo">269</span><a id="line.269"></a>
<span class="sourceLineNo">270</span><a id="line.270">    public void setValidationProtocol(String validationProtocol) {</a>
<span class="sourceLineNo">271</span><a id="line.271">        this.validationProtocol = validationProtocol;</a>
<span class="sourceLineNo">272</span><a id="line.272">    }</a>
<span class="sourceLineNo">273</span><a id="line.273"></a>
<span class="sourceLineNo">274</span><a id="line.274">    public String getRememberMeAttributeName() {</a>
<span class="sourceLineNo">275</span><a id="line.275">        return rememberMeAttributeName;</a>
<span class="sourceLineNo">276</span><a id="line.276">    }</a>
<span class="sourceLineNo">277</span><a id="line.277"></a>
<span class="sourceLineNo">278</span><a id="line.278">    public void setRememberMeAttributeName(String rememberMeAttributeName) {</a>
<span class="sourceLineNo">279</span><a id="line.279">        this.rememberMeAttributeName = rememberMeAttributeName;</a>
<span class="sourceLineNo">280</span><a id="line.280">    }</a>
<span class="sourceLineNo">281</span><a id="line.281"></a>
<span class="sourceLineNo">282</span><a id="line.282">    public String getDefaultRoles() {</a>
<span class="sourceLineNo">283</span><a id="line.283">        return defaultRoles;</a>
<span class="sourceLineNo">284</span><a id="line.284">    }</a>
<span class="sourceLineNo">285</span><a id="line.285"></a>
<span class="sourceLineNo">286</span><a id="line.286">    public void setDefaultRoles(String defaultRoles) {</a>
<span class="sourceLineNo">287</span><a id="line.287">        this.defaultRoles = defaultRoles;</a>
<span class="sourceLineNo">288</span><a id="line.288">    }</a>
<span class="sourceLineNo">289</span><a id="line.289"></a>
<span class="sourceLineNo">290</span><a id="line.290">    public String getDefaultPermissions() {</a>
<span class="sourceLineNo">291</span><a id="line.291">        return defaultPermissions;</a>
<span class="sourceLineNo">292</span><a id="line.292">    }</a>
<span class="sourceLineNo">293</span><a id="line.293"></a>
<span class="sourceLineNo">294</span><a id="line.294">    public void setDefaultPermissions(String defaultPermissions) {</a>
<span class="sourceLineNo">295</span><a id="line.295">        this.defaultPermissions = defaultPermissions;</a>
<span class="sourceLineNo">296</span><a id="line.296">    }</a>
<span class="sourceLineNo">297</span><a id="line.297"></a>
<span class="sourceLineNo">298</span><a id="line.298">    public String getRoleAttributeNames() {</a>
<span class="sourceLineNo">299</span><a id="line.299">        return roleAttributeNames;</a>
<span class="sourceLineNo">300</span><a id="line.300">    }</a>
<span class="sourceLineNo">301</span><a id="line.301"></a>
<span class="sourceLineNo">302</span><a id="line.302">    public void setRoleAttributeNames(String roleAttributeNames) {</a>
<span class="sourceLineNo">303</span><a id="line.303">        this.roleAttributeNames = roleAttributeNames;</a>
<span class="sourceLineNo">304</span><a id="line.304">    }</a>
<span class="sourceLineNo">305</span><a id="line.305"></a>
<span class="sourceLineNo">306</span><a id="line.306">    public String getPermissionAttributeNames() {</a>
<span class="sourceLineNo">307</span><a id="line.307">        return permissionAttributeNames;</a>
<span class="sourceLineNo">308</span><a id="line.308">    }</a>
<span class="sourceLineNo">309</span><a id="line.309"></a>
<span class="sourceLineNo">310</span><a id="line.310">    public void setPermissionAttributeNames(String permissionAttributeNames) {</a>
<span class="sourceLineNo">311</span><a id="line.311">        this.permissionAttributeNames = permissionAttributeNames;</a>
<span class="sourceLineNo">312</span><a id="line.312">    }</a>
<span class="sourceLineNo">313</span><a id="line.313">}</a>




























































</pre>
</div>
</main>
</body>
</html>
