<!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.authz.aop;</a>
<span class="sourceLineNo">020</span><a id="line.20"></a>
<span class="sourceLineNo">021</span><a id="line.21">import org.apache.shiro.aop.AnnotationMethodInterceptor;</a>
<span class="sourceLineNo">022</span><a id="line.22">import org.apache.shiro.aop.AnnotationResolver;</a>
<span class="sourceLineNo">023</span><a id="line.23">import org.apache.shiro.aop.MethodInvocation;</a>
<span class="sourceLineNo">024</span><a id="line.24">import org.apache.shiro.authz.AuthorizationException;</a>
<span class="sourceLineNo">025</span><a id="line.25"></a>
<span class="sourceLineNo">026</span><a id="line.26"></a>
<span class="sourceLineNo">027</span><a id="line.27">/**</a>
<span class="sourceLineNo">028</span><a id="line.28"> * An &lt;tt&gt;AnnotationMethodInterceptor&lt;/tt&gt; that asserts the calling code is authorized to execute the method</a>
<span class="sourceLineNo">029</span><a id="line.29"> * before allowing the invocation to continue by inspecting code annotations to perform an access control check.</a>
<span class="sourceLineNo">030</span><a id="line.30"> *</a>
<span class="sourceLineNo">031</span><a id="line.31"> * @since 0.1</a>
<span class="sourceLineNo">032</span><a id="line.32"> */</a>
<span class="sourceLineNo">033</span><a id="line.33">public abstract class AuthorizingAnnotationMethodInterceptor extends AnnotationMethodInterceptor</a>
<span class="sourceLineNo">034</span><a id="line.34">{</a>
<span class="sourceLineNo">035</span><a id="line.35">    </a>
<span class="sourceLineNo">036</span><a id="line.36">    /**</a>
<span class="sourceLineNo">037</span><a id="line.37">     * Constructor that ensures the internal &lt;code&gt;handler&lt;/code&gt; is set which will be used to perform the</a>
<span class="sourceLineNo">038</span><a id="line.38">     * authorization assertion checks when a supported annotation is encountered.</a>
<span class="sourceLineNo">039</span><a id="line.39">     * @param handler the internal &lt;code&gt;handler&lt;/code&gt; used to perform authorization assertion checks when a </a>
<span class="sourceLineNo">040</span><a id="line.40">     * supported annotation is encountered.</a>
<span class="sourceLineNo">041</span><a id="line.41">     */</a>
<span class="sourceLineNo">042</span><a id="line.42">    public AuthorizingAnnotationMethodInterceptor( AuthorizingAnnotationHandler handler ) {</a>
<span class="sourceLineNo">043</span><a id="line.43">        super(handler);</a>
<span class="sourceLineNo">044</span><a id="line.44">    }</a>
<span class="sourceLineNo">045</span><a id="line.45"></a>
<span class="sourceLineNo">046</span><a id="line.46">    /**</a>
<span class="sourceLineNo">047</span><a id="line.47">     *</a>
<span class="sourceLineNo">048</span><a id="line.48">     * @param handler</a>
<span class="sourceLineNo">049</span><a id="line.49">     * @param resolver</a>
<span class="sourceLineNo">050</span><a id="line.50">     * @since 1.1</a>
<span class="sourceLineNo">051</span><a id="line.51">     */</a>
<span class="sourceLineNo">052</span><a id="line.52">    public AuthorizingAnnotationMethodInterceptor( AuthorizingAnnotationHandler handler,</a>
<span class="sourceLineNo">053</span><a id="line.53">                                                   AnnotationResolver resolver) {</a>
<span class="sourceLineNo">054</span><a id="line.54">        super(handler, resolver);</a>
<span class="sourceLineNo">055</span><a id="line.55">    }</a>
<span class="sourceLineNo">056</span><a id="line.56"></a>
<span class="sourceLineNo">057</span><a id="line.57">    /**</a>
<span class="sourceLineNo">058</span><a id="line.58">     * Ensures the &lt;code&gt;methodInvocation&lt;/code&gt; is allowed to execute first before proceeding by calling the</a>
<span class="sourceLineNo">059</span><a id="line.59">     * {@link #assertAuthorized(org.apache.shiro.aop.MethodInvocation) assertAuthorized} method first.</a>
<span class="sourceLineNo">060</span><a id="line.60">     *</a>
<span class="sourceLineNo">061</span><a id="line.61">     * @param methodInvocation the method invocation to check for authorization prior to allowing it to proceed/execute.</a>
<span class="sourceLineNo">062</span><a id="line.62">     * @return the return value from the method invocation (the value of {@link org.apache.shiro.aop.MethodInvocation#proceed() MethodInvocation.proceed()}).</a>
<span class="sourceLineNo">063</span><a id="line.63">     * @throws org.apache.shiro.authz.AuthorizationException if the &lt;code&gt;MethodInvocation&lt;/code&gt; is not allowed to proceed.</a>
<span class="sourceLineNo">064</span><a id="line.64">     * @throws Throwable if any other error occurs.</a>
<span class="sourceLineNo">065</span><a id="line.65">     */</a>
<span class="sourceLineNo">066</span><a id="line.66">    public Object invoke(MethodInvocation methodInvocation) throws Throwable {</a>
<span class="sourceLineNo">067</span><a id="line.67">        assertAuthorized(methodInvocation);</a>
<span class="sourceLineNo">068</span><a id="line.68">        return methodInvocation.proceed();</a>
<span class="sourceLineNo">069</span><a id="line.69">    }</a>
<span class="sourceLineNo">070</span><a id="line.70"></a>
<span class="sourceLineNo">071</span><a id="line.71">    /**</a>
<span class="sourceLineNo">072</span><a id="line.72">     * Ensures the calling Subject is authorized to execute the specified &lt;code&gt;MethodInvocation&lt;/code&gt;.</a>
<span class="sourceLineNo">073</span><a id="line.73">     * &lt;p/&gt;</a>
<span class="sourceLineNo">074</span><a id="line.74">     * As this is an AnnotationMethodInterceptor, this implementation merely delegates to the internal</a>
<span class="sourceLineNo">075</span><a id="line.75">     * {@link AuthorizingAnnotationHandler AuthorizingAnnotationHandler} by first acquiring the annotation by</a>
<span class="sourceLineNo">076</span><a id="line.76">     * calling {@link #getAnnotation(MethodInvocation) getAnnotation(methodInvocation)} and then calls</a>
<span class="sourceLineNo">077</span><a id="line.77">     * {@link AuthorizingAnnotationHandler#assertAuthorized(java.lang.annotation.Annotation) handler.assertAuthorized(annotation)}.</a>
<span class="sourceLineNo">078</span><a id="line.78">     *</a>
<span class="sourceLineNo">079</span><a id="line.79">     * @param mi the &lt;code&gt;MethodInvocation&lt;/code&gt; to check to see if it is allowed to proceed/execute.</a>
<span class="sourceLineNo">080</span><a id="line.80">     * @throws AuthorizationException if the method invocation is not allowed to continue/execute.</a>
<span class="sourceLineNo">081</span><a id="line.81">     */</a>
<span class="sourceLineNo">082</span><a id="line.82">    public void assertAuthorized(MethodInvocation mi) throws AuthorizationException {</a>
<span class="sourceLineNo">083</span><a id="line.83">        try {</a>
<span class="sourceLineNo">084</span><a id="line.84">            ((AuthorizingAnnotationHandler)getHandler()).assertAuthorized(getAnnotation(mi));</a>
<span class="sourceLineNo">085</span><a id="line.85">        }</a>
<span class="sourceLineNo">086</span><a id="line.86">        catch(AuthorizationException ae) {</a>
<span class="sourceLineNo">087</span><a id="line.87">            // Annotation handler doesn't know why it was called, so add the information here if possible. </a>
<span class="sourceLineNo">088</span><a id="line.88">            // Don't wrap the exception here since we don't want to mask the specific exception, such as </a>
<span class="sourceLineNo">089</span><a id="line.89">            // UnauthenticatedException etc. </a>
<span class="sourceLineNo">090</span><a id="line.90">            if (ae.getCause() == null) ae.initCause(new AuthorizationException("Not authorized to invoke method: " + mi.getMethod()));</a>
<span class="sourceLineNo">091</span><a id="line.91">            throw ae;</a>
<span class="sourceLineNo">092</span><a id="line.92">        }         </a>
<span class="sourceLineNo">093</span><a id="line.93">    }</a>
<span class="sourceLineNo">094</span><a id="line.94">}</a>




























































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