<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="en">
<head>
<title>Source code</title>
<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
</head>
<body>
<div class="sourceContainer">
<pre><span class="sourceLineNo">001</span>/*<a name="line.1"></a>
<span class="sourceLineNo">002</span> * Licensed to the Apache Software Foundation (ASF) under one<a name="line.2"></a>
<span class="sourceLineNo">003</span> * or more contributor license agreements.  See the NOTICE file<a name="line.3"></a>
<span class="sourceLineNo">004</span> * distributed with this work for additional information<a name="line.4"></a>
<span class="sourceLineNo">005</span> * regarding copyright ownership.  The ASF licenses this file<a name="line.5"></a>
<span class="sourceLineNo">006</span> * to you under the Apache License, Version 2.0 (the<a name="line.6"></a>
<span class="sourceLineNo">007</span> * "License"); you may not use this file except in compliance<a name="line.7"></a>
<span class="sourceLineNo">008</span> * with the License.  You may obtain a copy of the License at<a name="line.8"></a>
<span class="sourceLineNo">009</span> *<a name="line.9"></a>
<span class="sourceLineNo">010</span> *     http://www.apache.org/licenses/LICENSE-2.0<a name="line.10"></a>
<span class="sourceLineNo">011</span> *<a name="line.11"></a>
<span class="sourceLineNo">012</span> * Unless required by applicable law or agreed to in writing,<a name="line.12"></a>
<span class="sourceLineNo">013</span> * software distributed under the License is distributed on an<a name="line.13"></a>
<span class="sourceLineNo">014</span> * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY<a name="line.14"></a>
<span class="sourceLineNo">015</span> * KIND, either express or implied.  See the License for the<a name="line.15"></a>
<span class="sourceLineNo">016</span> * specific language governing permissions and limitations<a name="line.16"></a>
<span class="sourceLineNo">017</span> * under the License.<a name="line.17"></a>
<span class="sourceLineNo">018</span> */<a name="line.18"></a>
<span class="sourceLineNo">019</span>package org.apache.shiro.web.filter.authz;<a name="line.19"></a>
<span class="sourceLineNo">020</span><a name="line.20"></a>
<span class="sourceLineNo">021</span>import org.apache.shiro.subject.Subject;<a name="line.21"></a>
<span class="sourceLineNo">022</span>import org.apache.shiro.util.StringUtils;<a name="line.22"></a>
<span class="sourceLineNo">023</span>import org.apache.shiro.web.filter.AccessControlFilter;<a name="line.23"></a>
<span class="sourceLineNo">024</span>import org.apache.shiro.web.util.WebUtils;<a name="line.24"></a>
<span class="sourceLineNo">025</span><a name="line.25"></a>
<span class="sourceLineNo">026</span>import javax.servlet.ServletRequest;<a name="line.26"></a>
<span class="sourceLineNo">027</span>import javax.servlet.ServletResponse;<a name="line.27"></a>
<span class="sourceLineNo">028</span>import javax.servlet.http.HttpServletResponse;<a name="line.28"></a>
<span class="sourceLineNo">029</span>import java.io.IOException;<a name="line.29"></a>
<span class="sourceLineNo">030</span><a name="line.30"></a>
<span class="sourceLineNo">031</span>/**<a name="line.31"></a>
<span class="sourceLineNo">032</span> * Superclass for authorization-related filters.  If an request is unauthorized, response handling is delegated to the<a name="line.32"></a>
<span class="sourceLineNo">033</span> * {@link #onAccessDenied(javax.servlet.ServletRequest, javax.servlet.ServletResponse) onAccessDenied} method, which<a name="line.33"></a>
<span class="sourceLineNo">034</span> * provides reasonable handling for most applications.<a name="line.34"></a>
<span class="sourceLineNo">035</span> *<a name="line.35"></a>
<span class="sourceLineNo">036</span> * @see #onAccessDenied(javax.servlet.ServletRequest, javax.servlet.ServletResponse)<a name="line.36"></a>
<span class="sourceLineNo">037</span> * @since 0.9<a name="line.37"></a>
<span class="sourceLineNo">038</span> */<a name="line.38"></a>
<span class="sourceLineNo">039</span>public abstract class AuthorizationFilter extends AccessControlFilter {<a name="line.39"></a>
<span class="sourceLineNo">040</span><a name="line.40"></a>
<span class="sourceLineNo">041</span>    /**<a name="line.41"></a>
<span class="sourceLineNo">042</span>     * The URL to which users should be redirected if they are denied access to an underlying path or resource,<a name="line.42"></a>
<span class="sourceLineNo">043</span>     * {@code null} by default which will issue a raw {@link HttpServletResponse#SC_UNAUTHORIZED} response<a name="line.43"></a>
<span class="sourceLineNo">044</span>     * (401 Unauthorized).<a name="line.44"></a>
<span class="sourceLineNo">045</span>     */<a name="line.45"></a>
<span class="sourceLineNo">046</span>    private String unauthorizedUrl;<a name="line.46"></a>
<span class="sourceLineNo">047</span><a name="line.47"></a>
<span class="sourceLineNo">048</span>    /**<a name="line.48"></a>
<span class="sourceLineNo">049</span>     * Returns the URL to which users should be redirected if they are denied access to an underlying path or resource,<a name="line.49"></a>
<span class="sourceLineNo">050</span>     * or {@code null} if a raw {@link HttpServletResponse#SC_UNAUTHORIZED} response should be issued (401 Unauthorized).<a name="line.50"></a>
<span class="sourceLineNo">051</span>     * &lt;p/&gt;<a name="line.51"></a>
<span class="sourceLineNo">052</span>     * The default is {@code null}, ensuring default web server behavior.  Override this default by calling the<a name="line.52"></a>
<span class="sourceLineNo">053</span>     * {@link #setUnauthorizedUrl(String) setUnauthorizedUrl} method with a meaningful path within your application<a name="line.53"></a>
<span class="sourceLineNo">054</span>     * if you would like to show the user a 'nice' page in the event of unauthorized access.<a name="line.54"></a>
<span class="sourceLineNo">055</span>     *<a name="line.55"></a>
<span class="sourceLineNo">056</span>     * @return the URL to which users should be redirected if they are denied access to an underlying path or resource,<a name="line.56"></a>
<span class="sourceLineNo">057</span>     *         or {@code null} if a raw {@link HttpServletResponse#SC_UNAUTHORIZED} response should be issued (401 Unauthorized).<a name="line.57"></a>
<span class="sourceLineNo">058</span>     */<a name="line.58"></a>
<span class="sourceLineNo">059</span>    public String getUnauthorizedUrl() {<a name="line.59"></a>
<span class="sourceLineNo">060</span>        return unauthorizedUrl;<a name="line.60"></a>
<span class="sourceLineNo">061</span>    }<a name="line.61"></a>
<span class="sourceLineNo">062</span><a name="line.62"></a>
<span class="sourceLineNo">063</span>    /**<a name="line.63"></a>
<span class="sourceLineNo">064</span>     * Sets the URL to which users should be redirected if they are denied access to an underlying path or resource.<a name="line.64"></a>
<span class="sourceLineNo">065</span>     * &lt;p/&gt;<a name="line.65"></a>
<span class="sourceLineNo">066</span>     * If the value is {@code null} a raw {@link HttpServletResponse#SC_UNAUTHORIZED} response will<a name="line.66"></a>
<span class="sourceLineNo">067</span>     * be issued (401 Unauthorized), retaining default web server behavior.<a name="line.67"></a>
<span class="sourceLineNo">068</span>     * &lt;p/&gt;<a name="line.68"></a>
<span class="sourceLineNo">069</span>     * Unless overridden by calling this method, the default value is {@code null}.  If desired, you can specify a<a name="line.69"></a>
<span class="sourceLineNo">070</span>     * meaningful path within your application if you would like to show the user a 'nice' page in the event of<a name="line.70"></a>
<span class="sourceLineNo">071</span>     * unauthorized access.<a name="line.71"></a>
<span class="sourceLineNo">072</span>     *<a name="line.72"></a>
<span class="sourceLineNo">073</span>     * @param unauthorizedUrl the URL to which users should be redirected if they are denied access to an underlying<a name="line.73"></a>
<span class="sourceLineNo">074</span>     *                        path or resource, or {@code null} to a ensure raw {@link HttpServletResponse#SC_UNAUTHORIZED} response is<a name="line.74"></a>
<span class="sourceLineNo">075</span>     *                        issued (401 Unauthorized).<a name="line.75"></a>
<span class="sourceLineNo">076</span>     */<a name="line.76"></a>
<span class="sourceLineNo">077</span>    public void setUnauthorizedUrl(String unauthorizedUrl) {<a name="line.77"></a>
<span class="sourceLineNo">078</span>        this.unauthorizedUrl = unauthorizedUrl;<a name="line.78"></a>
<span class="sourceLineNo">079</span>    }<a name="line.79"></a>
<span class="sourceLineNo">080</span><a name="line.80"></a>
<span class="sourceLineNo">081</span>    /**<a name="line.81"></a>
<span class="sourceLineNo">082</span>     * Handles the response when access has been denied.  It behaves as follows:<a name="line.82"></a>
<span class="sourceLineNo">083</span>     * &lt;ul&gt;<a name="line.83"></a>
<span class="sourceLineNo">084</span>     * &lt;li&gt;If the {@code Subject} is unknown&lt;sup&gt;&lt;a href="#known"&gt;[1]&lt;/a&gt;&lt;/sup&gt;:<a name="line.84"></a>
<span class="sourceLineNo">085</span>     * &lt;ol&gt;&lt;li&gt;The incoming request will be saved and they will be redirected to the login page for authentication<a name="line.85"></a>
<span class="sourceLineNo">086</span>     * (via the {@link #saveRequestAndRedirectToLogin(javax.servlet.ServletRequest, javax.servlet.ServletResponse)}<a name="line.86"></a>
<span class="sourceLineNo">087</span>     * method).&lt;/li&gt;<a name="line.87"></a>
<span class="sourceLineNo">088</span>     * &lt;li&gt;Once successfully authenticated, they will be redirected back to the originally attempted page.&lt;/li&gt;&lt;/ol&gt;<a name="line.88"></a>
<span class="sourceLineNo">089</span>     * &lt;/li&gt;<a name="line.89"></a>
<span class="sourceLineNo">090</span>     * &lt;li&gt;If the Subject is known:&lt;/li&gt;<a name="line.90"></a>
<span class="sourceLineNo">091</span>     * &lt;ol&gt;<a name="line.91"></a>
<span class="sourceLineNo">092</span>     * &lt;li&gt;The HTTP {@link HttpServletResponse#SC_UNAUTHORIZED} header will be set (401 Unauthorized)&lt;/li&gt;<a name="line.92"></a>
<span class="sourceLineNo">093</span>     * &lt;li&gt;If the {@link #getUnauthorizedUrl() unauthorizedUrl} has been configured, a redirect will be issued to that<a name="line.93"></a>
<span class="sourceLineNo">094</span>     * URL.  Otherwise the 401 response is rendered normally&lt;/li&gt;<a name="line.94"></a>
<span class="sourceLineNo">095</span>     * &lt;/ul&gt;<a name="line.95"></a>
<span class="sourceLineNo">096</span>     * &lt;code&gt;&lt;a name="known"&gt;[1]&lt;/a&gt;&lt;/code&gt;: A {@code Subject} is 'known' when<a name="line.96"></a>
<span class="sourceLineNo">097</span>     * &lt;code&gt;subject.{@link org.apache.shiro.subject.Subject#getPrincipal() getPrincipal()}&lt;/code&gt; is not {@code null},<a name="line.97"></a>
<span class="sourceLineNo">098</span>     * which implicitly means that the subject is either currently authenticated or they have been remembered via<a name="line.98"></a>
<span class="sourceLineNo">099</span>     * 'remember me' services.<a name="line.99"></a>
<span class="sourceLineNo">100</span>     *<a name="line.100"></a>
<span class="sourceLineNo">101</span>     * @param request  the incoming &lt;code&gt;ServletRequest&lt;/code&gt;<a name="line.101"></a>
<span class="sourceLineNo">102</span>     * @param response the outgoing &lt;code&gt;ServletResponse&lt;/code&gt;<a name="line.102"></a>
<span class="sourceLineNo">103</span>     * @return {@code false} always for this implementation.<a name="line.103"></a>
<span class="sourceLineNo">104</span>     * @throws IOException if there is any servlet error.<a name="line.104"></a>
<span class="sourceLineNo">105</span>     */<a name="line.105"></a>
<span class="sourceLineNo">106</span>    protected boolean onAccessDenied(ServletRequest request, ServletResponse response) throws IOException {<a name="line.106"></a>
<span class="sourceLineNo">107</span><a name="line.107"></a>
<span class="sourceLineNo">108</span>        Subject subject = getSubject(request, response);<a name="line.108"></a>
<span class="sourceLineNo">109</span>        // If the subject isn't identified, redirect to login URL<a name="line.109"></a>
<span class="sourceLineNo">110</span>        if (subject.getPrincipal() == null) {<a name="line.110"></a>
<span class="sourceLineNo">111</span>            saveRequestAndRedirectToLogin(request, response);<a name="line.111"></a>
<span class="sourceLineNo">112</span>        } else {<a name="line.112"></a>
<span class="sourceLineNo">113</span>            // If subject is known but not authorized, redirect to the unauthorized URL if there is one<a name="line.113"></a>
<span class="sourceLineNo">114</span>            // If no unauthorized URL is specified, just return an unauthorized HTTP status code<a name="line.114"></a>
<span class="sourceLineNo">115</span>            String unauthorizedUrl = getUnauthorizedUrl();<a name="line.115"></a>
<span class="sourceLineNo">116</span>            //SHIRO-142 - ensure that redirect _or_ error code occurs - both cannot happen due to response commit:<a name="line.116"></a>
<span class="sourceLineNo">117</span>            if (StringUtils.hasText(unauthorizedUrl)) {<a name="line.117"></a>
<span class="sourceLineNo">118</span>                WebUtils.issueRedirect(request, response, unauthorizedUrl);<a name="line.118"></a>
<span class="sourceLineNo">119</span>            } else {<a name="line.119"></a>
<span class="sourceLineNo">120</span>                WebUtils.toHttp(response).sendError(HttpServletResponse.SC_UNAUTHORIZED);<a name="line.120"></a>
<span class="sourceLineNo">121</span>            }<a name="line.121"></a>
<span class="sourceLineNo">122</span>        }<a name="line.122"></a>
<span class="sourceLineNo">123</span>        return false;<a name="line.123"></a>
<span class="sourceLineNo">124</span>    }<a name="line.124"></a>
<span class="sourceLineNo">125</span><a name="line.125"></a>
<span class="sourceLineNo">126</span>}<a name="line.126"></a>




























































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