- 浏览: 517521 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
ben_wu007:
没数据库设计 而且这样要写代码 还是做成配数据库好 ...
使用AOP做权限控制 -
邢邢色色:
支持楼主,但这本书没有讲trident,有些过时了~到amaz ...
《Storm入门》中文版 -
java_web_hack1:
我在FunctionProvider中,获取的Property ...
在Osworkflow中使用PropertySet存储业务数据 -
greemranqq:
腾飞 ~。~
Java并发和多线程译者征集 -
fantasy:
leonevo 写道hi, 我也在设计cmdb. 我觉得基于传 ...
ITSM-CMDB数据库设计-四种方案任你选
众所周知,如果没有对页面进行权限控制,用户只要输入URL就能进入任何页面。
下面就演示一下最基本的使用Fiter来控制页面的权限。
1.写一个FILTER,用来判断用户是否有权限进入指定页面。
java 代码
- import java.io.IOException;
- import javax.servlet.Filter;
- import javax.servlet.FilterChain;
- import javax.servlet.FilterConfig;
- import javax.servlet.ServletException;
- import javax.servlet.ServletRequest;
- import javax.servlet.ServletResponse;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import javax.servlet.http.HttpSession;
- import org.apache.log4j.Logger;
- import com.kiral.action.UserAction;
- import com.kiral.model.User;
- /*******************************************************************************
- * 在过滤器中实现权限控制类,用来检验用户是否有权限进入当前页面
- *
- * @作者:kiral
- * @日期:2006-6-24
- * @版本: 1.0
- ******************************************************************************/
- public class FilterServlet extends HttpServlet implements Filter {
- private static final long serialVersionUID = 5162189625393315379L;
- private static Logger LOG = Logger.getLogger(FilterServlet.class);
- /**
- * 配置允许的角色
- */
- private String allowRole = null;
- /**
- * 重定向的URL
- */
- private String redirectURl = null;
- public void init(FilterConfig filterConfig) throws ServletException {
- // 得到允许的角色,这个参数是由web.xml里的allowRole所指定
- allowRole = filterConfig.getInitParameter("allowRole");
- // 指定要重定向的页面
- redirectURl = "/locker/index.html";
- }
- /**
- * 在过滤器中实现权限控制
- */
- public void doFilter(ServletRequest sRequest, ServletResponse sResponse,
- FilterChain filterChain) throws IOException, ServletException {
- HttpServletRequest request = (HttpServletRequest) sRequest;
- HttpServletResponse response = (HttpServletResponse) sResponse;
- HttpSession session = request.getSession();
- // 如果回话中的用户为空,页面重新定向到登陆页面
- if (session.getAttribute(UserAction.CURRENT_USER) == null) {
- response.sendRedirect(redirectURl);
- }
- // 会话中存在用户,则验证用户是否存在当前页面的权限
- else {
- User user = (User) session.getAttribute(UserAction.CURRENT_USER);
- try {
- // 如果用户没有当前页的权限,页面重新定向到登陆页面
- if ("0".equals(allowRole) || user.hasPower(allowRole)) {
- filterChain.doFilter(sRequest, sResponse);
- } else {
- // 过滤器经过过滤后,过滤链继续传递请求和响应
- response.sendRedirect(redirectURl);
- }
- } catch (Throwable e) {
- LOG.error("权限过滤时候出现错误", e);
- throw new RuntimeException("权限过滤时候出现错误", e);
- }
- }
- }
- public void destroy() {
- }
- }
在web.xml中配置 要过滤的页面和能进入当前页面的角色
xml 代码
- <!---->
- <filter>
- <filter-name>UserAdminfilter-name>
- <!---->
- <filter-class>com.emap.web.FilterServletfilter-class>
- <!---->
- <init-param>
- <!---->
- <param-name>allowRoleparam-name>
- <param-value>1param-value>
- init-param>
- filter>
- <filter-mapping>
- <filter-name>UserAdminfilter-name>
- <url-pattern>/jsp/security/*url-pattern>
- filter-mapping>
上面配置的意思是说,当用户进入/jsp/security文件夹下的页面的时候,程序会进入FilterServlet 里的doFilter方法里,进行权限判断。
其他的页面权限控制:
1.你可以在filter里判断用户是否登录,然后需要特殊权限能访问的页面,在页面里进行判断。
2.推荐使用开源框架ACEGI来进行权限控制。
评论
21 楼
fantasy
2008-06-28
恩,是面向切面。过滤器可以看成是一个切面。
20 楼
xo_tobacoo
2008-06-24
我一直有个疑问:
不知道过滤器的处理能力是不是和面向方面中编程中的“方面”概念类似?
不知道过滤器的处理能力是不是和面向方面中编程中的“方面”概念类似?
19 楼
taelons
2008-04-04
这种需求的实现方法最完善的事acegi
18 楼
6fish
2008-04-03
doFilter()方法中能否调用 XxxxManager中的doFind()方法进行数据库查询?
17 楼
gaoran2008
2008-04-03
我个人认为用什么方式来控制你的用户权限,是取决你的业务需求。
一个简单的控制,随便写一下就好了。
中度的你用filter来控制就好了,不过要注意版本。
复杂的,结合开源的框架当然是最好不过的了。
一个简单的控制,随便写一下就好了。
中度的你用filter来控制就好了,不过要注意版本。
复杂的,结合开源的框架当然是最好不过的了。
16 楼
寄生虫
2008-04-01
我就是用struts2拦截器控制的权限拦截,配合namespace和method查找出其操作权限,如果有权限再进行数据范围的查找。
15 楼
Joo
2008-04-01
ninebirds 写道
我说以我看根本就没有必要要什么框架,用数据库查询就可以了,不要什么框的...
倒弄的很麻烦,权限其实做起来也还是容易的
倒弄的很麻烦,权限其实做起来也还是容易的
那大约是你没有碰上什么复杂的业务需求了
我现在正在写一个公司层面通用的RBAC模型的权限服务,希望以EJB组件方式发布供以后多个EJB项目调用
14 楼
Joo
2008-04-01
ltian 写道
jomper 写道
拦截器似乎更适合处理权限。
我也很想知道拦截器是什么,是不是其他框架的概念?如果是,那么权限就要依赖那个东东,这似乎不是很好。
在JSP/Servlet中有ServletContextListener监听器和filter过滤器,两者的作用域和作用方法是不一样的
如果说得是在EJB3中,那么也可以在method level使用拦截器在每个方法执行之前先进行一系列动作,从而一方面减少了相同代码的重复另外一方面保证了原有业务方法的单纯
13 楼
ninebirds
2008-04-01
我说以我看根本就没有必要要什么框架,用数据库查询就可以了,不要什么框的...
倒弄的很麻烦,权限其实做起来也还是容易的
倒弄的很麻烦,权限其实做起来也还是容易的
12 楼
ninebirds
2007-12-25
弄了一天的权限搞不定呀?希望兄弟们多多指点一下密集
11 楼
ninebirds
2007-12-25
10 楼
fantasy
2007-07-27
haoyunlyh 写道
如果权限做的复杂呢!这样的过滤器就不适用了吧
复杂的权限也可以用过滤器实现,只是需要增加配置信息而已。
9 楼
liu5201314
2007-07-26
spring MVC 里有个拦截器,蛮好用的.
8 楼
laiseeme
2007-07-26
我想知道你们说的拦截器是什么?
7 楼
haoyunlyh
2007-07-25
如果权限做的复杂呢!这样的过滤器就不适用了吧
6 楼
fantasy
2007-07-25
jomper 写道
拦截器似乎更适合处理权限。
恩 很对。我们目前就是使用拦截器控制的权限!
5 楼
fantasy
2007-07-25
leeking 写道
难道你的 当前用户是固定的吗?你写成了 UserAction.CURRENT_USER这种形式.
UserAction.CURRENT_USER 这个是当前用户的键,根据这个找到当前用户的值。
4 楼
gs.liutong
2007-07-25
有一些问题:
1.因为继承了HttpServlet和Servlet API紧耦合。
2.要注意request dispatcher的情况,Servlet 2.3 规范中的过滤器只能过滤 Web 客户机和其所访问的指定 Web 资源之间的内容。2.4 规范消除了这个限制,通过增强filter和request dispatcher的配合。
1.因为继承了HttpServlet和Servlet API紧耦合。
2.要注意request dispatcher的情况,Servlet 2.3 规范中的过滤器只能过滤 Web 客户机和其所访问的指定 Web 资源之间的内容。2.4 规范消除了这个限制,通过增强filter和request dispatcher的配合。
3 楼
jomper
2007-07-24
拦截器似乎更适合处理权限。
2 楼
大老鼠上的小草原
2007-07-24
<br/>
<strong>fantasy 写道:</strong><br/>
<div class='quote_div'>
<p> 众所周知,如果没有对页面进行权限控制,用户只要输入URL就能进入任何页面。</p>
<p> 下面就演示一下最基本的使用Fiter来控制页面的权限。</p>
<p> 1.写一个FILTER,用来判断用户是否有权限进入指定页面。</p>
<div class='code_title'>java 代码</div>
<div class='dp-highlighter'>
<div class='bar'/>
<ol class='dp-j'>
<li class='alt'><span><span class='keyword'>import</span><span> java.io.IOException; </span></span> </li>
<li class=''><span> </span> </li>
<li class='alt'><span/><span class='keyword'>import</span><span> javax.servlet.Filter; </span> </li>
<li class=''><span/><span class='keyword'>import</span><span> javax.servlet.FilterChain; </span> </li>
<li class='alt'><span/><span class='keyword'>import</span><span> javax.servlet.FilterConfig; </span> </li>
<li class=''><span/><span class='keyword'>import</span><span> javax.servlet.ServletException; </span> </li>
<li class='alt'><span/><span class='keyword'>import</span><span> javax.servlet.ServletRequest; </span> </li>
<li class=''><span/><span class='keyword'>import</span><span> javax.servlet.ServletResponse; </span> </li>
<li class='alt'><span/><span class='keyword'>import</span><span> javax.servlet.http.HttpServlet; </span> </li>
<li class=''><span/><span class='keyword'>import</span><span> javax.servlet.http.HttpServletRequest; </span> </li>
<li class='alt'><span/><span class='keyword'>import</span><span> javax.servlet.http.HttpServletResponse; </span> </li>
<li class=''><span/><span class='keyword'>import</span><span> javax.servlet.http.HttpSession; </span> </li>
<li class='alt'><span> </span> </li>
<li class=''><span/><span class='keyword'>import</span><span> org.apache.log4j.Logger; </span> </li>
<li class='alt'><span> </span> </li>
<li class=''><span/><span class='keyword'>import</span><span> com.kiral.action.UserAction; </span> </li>
<li class='alt'><span/><span class='keyword'>import</span><span> com.kiral.model.User; </span> </li>
<li class=''><span> </span> </li>
<li class='alt'><span/><span class='comment'>/******************************************************************************* </span> </li>
<li class=''><span><span class='comment'> * 在过滤器中实现权限控制类,用来检验用户是否有权限进入当前页面 </span> </span> </li>
<li class='alt'><span><span class='comment'> * </span> </span> </li>
<li class=''><span><span class='comment'> * @作者:kiral </span> </span> </li>
<li class='alt'><span><span class='comment'> * @日期:2006-6-24 </span> </span> </li>
<li class=''><span><span class='comment'> * @版本: 1.0 </span> </span> </li>
<li class='alt'><span><span class='comment'> ******************************************************************************/</span><span> </span></span> </li>
<li class=''><span/><span class='keyword'>public</span><span> </span><span class='keyword'>class</span><span> FilterServlet </span><span class='keyword'>extends</span><span> HttpServlet </span><span class='keyword'>implements</span><span> Filter { </span> </li>
<li class='alt'><span> </span><span class='keyword'>private</span><span> </span><span class='keyword'>static</span><span> </span><span class='keyword'>final</span><span> </span><span class='keyword'>long</span><span> serialVersionUID = 5162189625393315379L; </span> </li>
<li class=''><span> </span> </li>
<li class='alt'><span> </span><span class='keyword'>private</span><span> </span><span class='keyword'>static</span><span> Logger LOG = Logger.getLogger(FilterServlet.</span><span class='keyword'>class</span><span>); </span> </li>
<li class=''><span> </span> </li>
<li class='alt'><span> </span><span class='comment'>/** </span> </li>
<li class=''><span><span class='comment'> * 配置允许的角色 </span> </span> </li>
<li class='alt'><span><span class='comment'> */</span><span> </span></span> </li>
<li class=''><span> </span><span class='keyword'>private</span><span> String allowRole = </span><span class='keyword'>null</span><span>; </span> </li>
<li class='alt'><span> </span> </li>
<li class=''><span> </span><span class='comment'>/** </span> </li>
<li class='alt'><span><span class='comment'> * 重定向的URL </span> </span> </li>
<li class=''><span><span class='comment'> */</span><span> </span></span> </li>
<li class='alt'><span> </span><span class='keyword'>private</span><span> String redirectURl = </span><span class='keyword'>null</span><span>; </span> </li>
<li class=''><span> </span> </li>
<li class='alt'><span> </span><span class='keyword'>public</span><span> </span><span class='keyword'>void</span><span> init(FilterConfig filterConfig) </span><span class='keyword'>throws</span><span> ServletException { </span> </li>
<li class=''><span> </span><span class='comment'>// 得到允许的角色,这个参数是由web.xml里的allowRole所指定 </span><span> </span> </li>
<li class='alt'><span> allowRole = filterConfig.getInitParameter(</span><span class='string'>"allowRole"</span><span>); </span> </li>
<li class=''><span> </span><span class='comment'>// 指定要重定向的页面 </span><span> </span> </li>
<li class='alt'><span> redirectURl = </span><span class='string'>"/locker/index.html"</span><span>; </span> </li>
<li class=''><span> } </span> </li>
<li class='alt'><span> </span> </li>
<li class=''><span> </span><span class='comment'>/** </span> </li>
<li class='alt'><span><span class='comment'> * 在过滤器中实现权限控制 </span> </span> </li>
<li class=''><span><span class='comment'> */</span><span> </span></span> </li>
<li class='alt'><span> </span><span class='keyword'>public</span><span> </span><span class='keyword'>void</span><span> doFilter(ServletRequest sRequest, ServletResponse sResponse, </span> </li>
<li class=''><span> FilterChain filterChain) </span><span class='keyword'>throws</span><span> IOException, ServletException { </span> </li>
<li class='alt'><span> HttpServletRequest request = (HttpServletRequest) sRequest; </span> </li>
<li class=''><span> HttpServletResponse response = (HttpServletResponse) sResponse; </span> </li>
<li class='alt'><span> HttpSession session = request.getSession(); </span> </li>
<li class=''><span> </span> </li>
<li class='alt'><span> </span><span class='comment'>// 如果回话中的用户为空,页面重新定向到登陆页面 </span><span> </span> </li>
<li class=''><span> </span><span class='keyword'>if</span><span> (session.getAttribute(UserAction.CURRENT_USER) == </span><span class='keyword'>null</span><span>) { </span> </li>
<li class='alt'><span> response.sendRedirect(redirectURl); </span> </li>
<li class=''><span> } </span> </li>
<li class='alt'><span> </span><span class='comment'>// 会话中存在用户,则验证用户是否存在当前页面的权限 </span><span> </span> </li>
<li class=''><span> </span><span class='keyword'>else</span><span> { </span> </li>
<li class='alt'><span> User user = (User) session.getAttribute(UserAction.CURRENT_USER); </span> </li>
<li class=''><span> </span><span class='keyword'>try</span><span> { </span> </li>
<li class='alt'><span> </span><span class='comment'>// 如果用户没有当前页的权限,页面重新定向到登陆页面 </span><span> </span> </li>
<li class=''><span> </span><span class='keyword'>if</span><span> (</span><span class='string'>"0"</span><span>.equals(allowRole) || user.hasPower(allowRole)) { </span> </li>
<li class='alt'><span> filterChain.doFilter(sRequest, sResponse); </span> </li>
<li class=''><span> } </span><span class='keyword'>else</span><span> { </span> </li>
<li class='alt'><span> </span><span class='comment'>// 过滤器经过过滤后,过滤链继续传递请求和响应 </span><span> </span> </li>
<li class=''><span> response.sendRedirect(redirectURl); </span> </li>
<li class='alt'><span> } </span> </li>
<li class=''><span> } </span><span class='keyword'>catch</span><span> (Throwable e) { </span> </li>
<li class='alt'><span> LOG.error(</span><span class='string'>"权限过滤时候出现错误"</span><span>, e); </span> </li>
<li class=''><span> </span><span class='keyword'>throw</span><span> </span><span class='keyword'>new</span><span> RuntimeException(</span><span class='string'>"权限过滤时候出现错误"</span><span>, e); </span> </li>
<li class='alt'><span> } </span> </li>
<li class=''><span> } </span> </li>
<li class='alt'><span> } </span> </li>
<li class=''><span> </span> </li>
<li class='alt'><span> </span><span class='keyword'>public</span><span> </span><span class='keyword'>void</span><span> destroy() { </span> </li>
<li class=''><span> } </span> </li>
<li class='alt'><span> </span> </li>
<li class=''><span>} </span> </li>
</ol>
</div>
<p> </p>
<p>在web.xml中配置 要过滤的页面和能进入当前页面的角色</p>
<div class='code_title'>xml 代码</div>
<div class='dp-highlighter'>
<div class='bar'/>
<ol class='dp-xml'>
<li class='alt'><span><span class='comments'><!----></span><span> </span></span> </li>
<li class=''><span> </span><span class='tag'><</span><span class='tag-name'>filter</span><span class='tag'>></span><span> </span> </li>
<li class='alt'><span> </span><span class='tag'><</span><span class='tag-name'>filter-name</span><span class='tag'>></span><span>UserAdmin</span><span class='tag'><span class='tag-name'>filter-name</span><span class='tag'>></span><span> </span> </span></li>
<li class=''><span> </span><span class='comments'><!----></span><span> </span> </li>
<li class='alt'><span> </span><span class='tag'><</span><span class='tag-name'>filter-class</span><span class='tag'>></span><span>com.emap.web.FilterServlet</span><span class='tag'><span class='tag-name'>filter-class</span><span class='tag'>></span><span> </span> </span></li>
<li class=''><span> </span><span class='comments'><!----></span><span> </span> </li>
<li class='alt'><span> </span><span class='tag'><</span><span class='tag-name'>init-param</span><span class='tag'>></span><span> </span> </li>
<li class='alt'><span> <span class='comments'><!----></span><span> </span></span> </li>
<li class=''><span> </span><span class='tag'><</span><span class='tag-name'>param-name</span><span class='tag'>></span><span>allowRole</span><span class='tag'><span class='tag-name'>param-name</span><span class='tag'>></span><span> </span> </span></li>
<li class='alt'><span> </span><span class='tag'><</span><span class='tag-name'>param-value</span><span class='tag'>></span><span>1</span><span class='tag'><span class='tag-name'>param-value</span><span class='tag'>></span><span> </span> </span></li>
<li class=''><span> </span><span class='tag'><span class='tag-name'>init-param</span><span class='tag'>></span><span> </span> </span></li>
<li class='alt'><span> </span><span class='tag'><span class='tag-name'>filter</span><span class='tag'>></span><span> </span> </span></li>
<li class=''><span> </span><span class='tag'><</span><span class='tag-name'>filter-mapping</span><span class='tag'>></span><span> </span> </li>
<li class='alt'><span> </span><span class='tag'><</span><span class='tag-name'>filter-name</span><span class='tag'>></span><span>UserAdmin</span><span class='tag'><span class='tag-name'>filter-name</span><span class='tag'>></span><span> </span> </span></li>
<li class=''><span> </span><span class='tag'><</span><span class='tag-name'>url-pattern</span><span class='tag'>></span><span>/jsp/security/*</span><span class='tag'><span class='tag-name'>url-pattern</span><span class='tag'>></span><span> </span> </span></li>
<li class='alt'><span> </span><span class='tag'><span class='tag-name'>filter-mapping</span><span class='tag'>></span><span> </span> </span></li>
</ol>
</div>
<p>上面配置的意思是说,当用户进入<span>/jsp/security文件夹下的页面的时候,程序会进入FilterServlet 里的doFilter方法里,进行权限判断。</span></p>
<p><span/> <strong>其他的页面权限控制:</strong></p>
<p> 1.你可以在filter里判断用户是否登录,然后需要特殊权限能访问的页面,在页面里进行判断。</p>
<p> 2.推荐使用开源框架ACEGI来进行权限控制。</p>
<p> </p>
</div>
<br/>
<br/>
<br/>
<br/>
<strong>fantasy 写道:</strong><br/>
<div class='quote_div'>
<p> 众所周知,如果没有对页面进行权限控制,用户只要输入URL就能进入任何页面。</p>
<p> 下面就演示一下最基本的使用Fiter来控制页面的权限。</p>
<p> 1.写一个FILTER,用来判断用户是否有权限进入指定页面。</p>
<div class='code_title'>java 代码</div>
<div class='dp-highlighter'>
<div class='bar'/>
<ol class='dp-j'>
<li class='alt'><span><span class='keyword'>import</span><span> java.io.IOException; </span></span> </li>
<li class=''><span> </span> </li>
<li class='alt'><span/><span class='keyword'>import</span><span> javax.servlet.Filter; </span> </li>
<li class=''><span/><span class='keyword'>import</span><span> javax.servlet.FilterChain; </span> </li>
<li class='alt'><span/><span class='keyword'>import</span><span> javax.servlet.FilterConfig; </span> </li>
<li class=''><span/><span class='keyword'>import</span><span> javax.servlet.ServletException; </span> </li>
<li class='alt'><span/><span class='keyword'>import</span><span> javax.servlet.ServletRequest; </span> </li>
<li class=''><span/><span class='keyword'>import</span><span> javax.servlet.ServletResponse; </span> </li>
<li class='alt'><span/><span class='keyword'>import</span><span> javax.servlet.http.HttpServlet; </span> </li>
<li class=''><span/><span class='keyword'>import</span><span> javax.servlet.http.HttpServletRequest; </span> </li>
<li class='alt'><span/><span class='keyword'>import</span><span> javax.servlet.http.HttpServletResponse; </span> </li>
<li class=''><span/><span class='keyword'>import</span><span> javax.servlet.http.HttpSession; </span> </li>
<li class='alt'><span> </span> </li>
<li class=''><span/><span class='keyword'>import</span><span> org.apache.log4j.Logger; </span> </li>
<li class='alt'><span> </span> </li>
<li class=''><span/><span class='keyword'>import</span><span> com.kiral.action.UserAction; </span> </li>
<li class='alt'><span/><span class='keyword'>import</span><span> com.kiral.model.User; </span> </li>
<li class=''><span> </span> </li>
<li class='alt'><span/><span class='comment'>/******************************************************************************* </span> </li>
<li class=''><span><span class='comment'> * 在过滤器中实现权限控制类,用来检验用户是否有权限进入当前页面 </span> </span> </li>
<li class='alt'><span><span class='comment'> * </span> </span> </li>
<li class=''><span><span class='comment'> * @作者:kiral </span> </span> </li>
<li class='alt'><span><span class='comment'> * @日期:2006-6-24 </span> </span> </li>
<li class=''><span><span class='comment'> * @版本: 1.0 </span> </span> </li>
<li class='alt'><span><span class='comment'> ******************************************************************************/</span><span> </span></span> </li>
<li class=''><span/><span class='keyword'>public</span><span> </span><span class='keyword'>class</span><span> FilterServlet </span><span class='keyword'>extends</span><span> HttpServlet </span><span class='keyword'>implements</span><span> Filter { </span> </li>
<li class='alt'><span> </span><span class='keyword'>private</span><span> </span><span class='keyword'>static</span><span> </span><span class='keyword'>final</span><span> </span><span class='keyword'>long</span><span> serialVersionUID = 5162189625393315379L; </span> </li>
<li class=''><span> </span> </li>
<li class='alt'><span> </span><span class='keyword'>private</span><span> </span><span class='keyword'>static</span><span> Logger LOG = Logger.getLogger(FilterServlet.</span><span class='keyword'>class</span><span>); </span> </li>
<li class=''><span> </span> </li>
<li class='alt'><span> </span><span class='comment'>/** </span> </li>
<li class=''><span><span class='comment'> * 配置允许的角色 </span> </span> </li>
<li class='alt'><span><span class='comment'> */</span><span> </span></span> </li>
<li class=''><span> </span><span class='keyword'>private</span><span> String allowRole = </span><span class='keyword'>null</span><span>; </span> </li>
<li class='alt'><span> </span> </li>
<li class=''><span> </span><span class='comment'>/** </span> </li>
<li class='alt'><span><span class='comment'> * 重定向的URL </span> </span> </li>
<li class=''><span><span class='comment'> */</span><span> </span></span> </li>
<li class='alt'><span> </span><span class='keyword'>private</span><span> String redirectURl = </span><span class='keyword'>null</span><span>; </span> </li>
<li class=''><span> </span> </li>
<li class='alt'><span> </span><span class='keyword'>public</span><span> </span><span class='keyword'>void</span><span> init(FilterConfig filterConfig) </span><span class='keyword'>throws</span><span> ServletException { </span> </li>
<li class=''><span> </span><span class='comment'>// 得到允许的角色,这个参数是由web.xml里的allowRole所指定 </span><span> </span> </li>
<li class='alt'><span> allowRole = filterConfig.getInitParameter(</span><span class='string'>"allowRole"</span><span>); </span> </li>
<li class=''><span> </span><span class='comment'>// 指定要重定向的页面 </span><span> </span> </li>
<li class='alt'><span> redirectURl = </span><span class='string'>"/locker/index.html"</span><span>; </span> </li>
<li class=''><span> } </span> </li>
<li class='alt'><span> </span> </li>
<li class=''><span> </span><span class='comment'>/** </span> </li>
<li class='alt'><span><span class='comment'> * 在过滤器中实现权限控制 </span> </span> </li>
<li class=''><span><span class='comment'> */</span><span> </span></span> </li>
<li class='alt'><span> </span><span class='keyword'>public</span><span> </span><span class='keyword'>void</span><span> doFilter(ServletRequest sRequest, ServletResponse sResponse, </span> </li>
<li class=''><span> FilterChain filterChain) </span><span class='keyword'>throws</span><span> IOException, ServletException { </span> </li>
<li class='alt'><span> HttpServletRequest request = (HttpServletRequest) sRequest; </span> </li>
<li class=''><span> HttpServletResponse response = (HttpServletResponse) sResponse; </span> </li>
<li class='alt'><span> HttpSession session = request.getSession(); </span> </li>
<li class=''><span> </span> </li>
<li class='alt'><span> </span><span class='comment'>// 如果回话中的用户为空,页面重新定向到登陆页面 </span><span> </span> </li>
<li class=''><span> </span><span class='keyword'>if</span><span> (session.getAttribute(UserAction.CURRENT_USER) == </span><span class='keyword'>null</span><span>) { </span> </li>
<li class='alt'><span> response.sendRedirect(redirectURl); </span> </li>
<li class=''><span> } </span> </li>
<li class='alt'><span> </span><span class='comment'>// 会话中存在用户,则验证用户是否存在当前页面的权限 </span><span> </span> </li>
<li class=''><span> </span><span class='keyword'>else</span><span> { </span> </li>
<li class='alt'><span> User user = (User) session.getAttribute(UserAction.CURRENT_USER); </span> </li>
<li class=''><span> </span><span class='keyword'>try</span><span> { </span> </li>
<li class='alt'><span> </span><span class='comment'>// 如果用户没有当前页的权限,页面重新定向到登陆页面 </span><span> </span> </li>
<li class=''><span> </span><span class='keyword'>if</span><span> (</span><span class='string'>"0"</span><span>.equals(allowRole) || user.hasPower(allowRole)) { </span> </li>
<li class='alt'><span> filterChain.doFilter(sRequest, sResponse); </span> </li>
<li class=''><span> } </span><span class='keyword'>else</span><span> { </span> </li>
<li class='alt'><span> </span><span class='comment'>// 过滤器经过过滤后,过滤链继续传递请求和响应 </span><span> </span> </li>
<li class=''><span> response.sendRedirect(redirectURl); </span> </li>
<li class='alt'><span> } </span> </li>
<li class=''><span> } </span><span class='keyword'>catch</span><span> (Throwable e) { </span> </li>
<li class='alt'><span> LOG.error(</span><span class='string'>"权限过滤时候出现错误"</span><span>, e); </span> </li>
<li class=''><span> </span><span class='keyword'>throw</span><span> </span><span class='keyword'>new</span><span> RuntimeException(</span><span class='string'>"权限过滤时候出现错误"</span><span>, e); </span> </li>
<li class='alt'><span> } </span> </li>
<li class=''><span> } </span> </li>
<li class='alt'><span> } </span> </li>
<li class=''><span> </span> </li>
<li class='alt'><span> </span><span class='keyword'>public</span><span> </span><span class='keyword'>void</span><span> destroy() { </span> </li>
<li class=''><span> } </span> </li>
<li class='alt'><span> </span> </li>
<li class=''><span>} </span> </li>
</ol>
</div>
<p> </p>
<p>在web.xml中配置 要过滤的页面和能进入当前页面的角色</p>
<div class='code_title'>xml 代码</div>
<div class='dp-highlighter'>
<div class='bar'/>
<ol class='dp-xml'>
<li class='alt'><span><span class='comments'><!----></span><span> </span></span> </li>
<li class=''><span> </span><span class='tag'><</span><span class='tag-name'>filter</span><span class='tag'>></span><span> </span> </li>
<li class='alt'><span> </span><span class='tag'><</span><span class='tag-name'>filter-name</span><span class='tag'>></span><span>UserAdmin</span><span class='tag'><span class='tag-name'>filter-name</span><span class='tag'>></span><span> </span> </span></li>
<li class=''><span> </span><span class='comments'><!----></span><span> </span> </li>
<li class='alt'><span> </span><span class='tag'><</span><span class='tag-name'>filter-class</span><span class='tag'>></span><span>com.emap.web.FilterServlet</span><span class='tag'><span class='tag-name'>filter-class</span><span class='tag'>></span><span> </span> </span></li>
<li class=''><span> </span><span class='comments'><!----></span><span> </span> </li>
<li class='alt'><span> </span><span class='tag'><</span><span class='tag-name'>init-param</span><span class='tag'>></span><span> </span> </li>
<li class='alt'><span> <span class='comments'><!----></span><span> </span></span> </li>
<li class=''><span> </span><span class='tag'><</span><span class='tag-name'>param-name</span><span class='tag'>></span><span>allowRole</span><span class='tag'><span class='tag-name'>param-name</span><span class='tag'>></span><span> </span> </span></li>
<li class='alt'><span> </span><span class='tag'><</span><span class='tag-name'>param-value</span><span class='tag'>></span><span>1</span><span class='tag'><span class='tag-name'>param-value</span><span class='tag'>></span><span> </span> </span></li>
<li class=''><span> </span><span class='tag'><span class='tag-name'>init-param</span><span class='tag'>></span><span> </span> </span></li>
<li class='alt'><span> </span><span class='tag'><span class='tag-name'>filter</span><span class='tag'>></span><span> </span> </span></li>
<li class=''><span> </span><span class='tag'><</span><span class='tag-name'>filter-mapping</span><span class='tag'>></span><span> </span> </li>
<li class='alt'><span> </span><span class='tag'><</span><span class='tag-name'>filter-name</span><span class='tag'>></span><span>UserAdmin</span><span class='tag'><span class='tag-name'>filter-name</span><span class='tag'>></span><span> </span> </span></li>
<li class=''><span> </span><span class='tag'><</span><span class='tag-name'>url-pattern</span><span class='tag'>></span><span>/jsp/security/*</span><span class='tag'><span class='tag-name'>url-pattern</span><span class='tag'>></span><span> </span> </span></li>
<li class='alt'><span> </span><span class='tag'><span class='tag-name'>filter-mapping</span><span class='tag'>></span><span> </span> </span></li>
</ol>
</div>
<p>上面配置的意思是说,当用户进入<span>/jsp/security文件夹下的页面的时候,程序会进入FilterServlet 里的doFilter方法里,进行权限判断。</span></p>
<p><span/> <strong>其他的页面权限控制:</strong></p>
<p> 1.你可以在filter里判断用户是否登录,然后需要特殊权限能访问的页面,在页面里进行判断。</p>
<p> 2.推荐使用开源框架ACEGI来进行权限控制。</p>
<p> </p>
</div>
<br/>
<br/>
<br/>
<br/>
发表评论
-
Google Guava官方教程(中文版)
2014-10-24 23:48 2969原文链接 译文链接 ... -
《Storm入门》中文版
2014-05-28 12:38 2365本文翻译自《Getting Star ... -
《Java 7 并发编程指南》中文版
2013-11-03 17:00 8988原文链接 作者: Javier Fernández Gonz ... -
Java NIO系列教程
2013-06-25 17:03 4193原文地址:http://tutorials.jenkov.c ... -
[并发译文]Java内存模型手册
2013-01-20 21:13 2182原文地址:http://gee.cs.oswego.edu/ ... -
[并发编程]聊聊并发
2012-12-23 03:44 2313聊聊并发系列文章是我在InfoQ发表的并发编程连载文 ... -
构建JSONP字符串
2012-09-21 10:28 23881.咱们需要一个这样的JSONP字符串 var cal ... -
聊聊并发(二)Java SE1.6中的Synchronized
2012-05-24 13:51 2138本文属于作者原创,原文发表于InfoQ中文站。 ... -
聊聊并发(一)深入分析Volatile的实现原理
2012-02-22 09:39 2870本文属于作者原创,原文发表于InfoQ中文站。 ... -
JVM运行时数据区(2011年6月的JVM规范)
2011-10-18 13:30 1976本文是《The Java Virtual Machine Sp ... -
AOP的实现机制
2011-10-18 10:15 7790附件中有本文的源代码和Pdf版。本文写的很长的原因,是不希望大 ... -
单点登录设计
2011-09-25 15:20 4709使用独立的单点登录应用程序来做单点登录,这样可扩展性和安全性会 ... -
Java虚拟机
2011-08-25 19:50 2029JVM JVM即Java虚拟机,它是一个想象中的机器,通 ... -
HttpClient
2011-08-16 15:27 5884HttpClient是一个模拟HTTP请求的工具类,目前我们在 ... -
Eclipse插件开发
2011-07-22 11:15 1900插件开发工具 我觉得进行RCP开发还是用专门的ID ... -
Opencomet之Session设计
2011-06-24 13:08 2000本文主要介绍Opencomet 里的Session设计。见附件 ... -
单元测试用例设计
2011-06-15 22:42 1574测试用例设计的原则是短,精和易读。 如何做到短: ... -
使用AOP做权限控制
2011-06-06 20:49 6756见附件! -
JAVA6可以使用字符串累加
2011-05-12 10:42 3837在JAVA6中,编译器会始终对字符串的累加操作做优化编译。 ... -
开发中的小心得
2011-02-04 01:13 1680总结一下自己在开发上的一些小心得,持续更新,欢迎大家补充! ...
相关推荐
【Filter控制页面的访问权限】是指在Web应用中,通过Filter(过滤器)技术来实现对用户访问特定页面的权限管理。Filter是Java Servlet API的一部分,它可以拦截HTTP请求,在请求到达目标Servlet或JSP之前进行预处理...
在"使用Filter控制页面的权限"的实践中,我们可以按照以下步骤来实现: 1. **创建Filter**: 首先,我们需要创建一个自定义的`Filter`类,该类需要实现`javax.servlet.Filter`接口,并重写`doFilter()`方法。在这个...
在这个场景中,"Filter进行权限控制"指的是使用`Filter`来实现用户访问权限的管理,确保只有登录后的用户才能访问特定的资源。下面我们将深入探讨`Filter`的工作原理以及如何实现登录控制。 `Filter`是Java Servlet...
本篇文章将详细探讨如何在SpringBoot中实现基于RBAC(Role-Based Access Control,基于角色的访问控制)的权限控制,包括菜单控制、页面元素控制以及URL控制。 首先,让我们理解RBAC模型。RBAC是一种权限分配策略,...
解压后,你可以查看源码,学习如何实现一个具体的JSP权限管理系统,包括Filter的使用、用户验证和权限控制等。 总的来说,JSP权限管理系统filter是一种有效的安全措施,它通过拦截和处理请求,确保了Web应用的安全...
通过上述讲解,你应该对如何在Java Web中使用Filter实现访问权限控制有了基本的理解。在深入研究这个示例的博客文章(https://blog.csdn.net/yuzhiqiang_1993/article/details/81288912)后,你可以了解到更多具体...
本话题主要关注如何使用Java Filter来限制用户的浏览权限,确保只有经过身份验证和授权的用户才能访问特定的资源。这在构建安全的Web应用程序时至关重要。 首先,我们需要了解Java Filter的基本概念。Filter是...
本话题将详细探讨如何利用Filter来限制用户浏览特定的页面,以实现用户权限控制。 一、Filter概述 Filter是Servlet规范的一部分,它允许开发者在请求到达目标资源(如Servlet或JSP)之前和之后对请求和响应进行拦截...
本篇将详细探讨`filter`如何用于过滤非登录用户的权限控制,以及相关的源码实例。 一、Filter基本概念 在Java Servlet规范中,Filter是一个接口,它允许开发者在请求到达Servlet之前对其进行拦截和处理,也可以在...
总的来说,使用Filter进行登录权限验证是一种常见的做法,它允许我们在不修改具体业务逻辑的情况下,统一地控制用户访问权限。这种方式提高了代码的可维护性和复用性。在实际应用中,我们还可以根据需求对Filter进行...
在这个场景中,我们将探讨如何使用`Filter`来实现权限访问控制,以及确保同一账号只能在一台设备上登录。 **一、Filter过滤器基础** 1. **定义与工作原理**:`Filter`是Servlet规范的一部分,它在请求到达目标...
Spring Security是Java Web开发中广泛使用的安全库,它提供了强大的权限控制功能。通过配置或注解,可以轻松地实现过滤器链,进行身份验证和授权。 6. **Filter的配置**: 在`web.xml`中,我们需要定义过滤器并...
过滤器(Filter)技术常被用来实现多层权限控制,确保只有合法的用户才能访问特定的资源。本文将深入探讨如何利用过滤器实现多层权限控制,并结合给定的标签“源码”和“工具”,来提供一个具体的实践示例。 首先,...
在本文中,我们将深入探讨如何使用JSP、Servlet、Filter和JavaBean来实现一个权限管理的实例。这些技术是构建动态Web应用的核心组件,尤其是在处理用户登录和权限控制时。 首先,`JSP (JavaServer Pages)`是一种...
例如,一个只允许管理员访问的页面,可以在控制器方法上添加`@RequiresRoles("admin")`注解。 通过以上步骤,你就可以在Spring中成功集成Shiro并实现动态URL权限控制了。这不仅提高了代码的可维护性,还使得权限...
本文将详细介绍如何使用filter来对servlet和jsp页面的内容进行过滤,并在过滤后输出。 首先,了解Servlet Filter的基本概念。Filter是Java Servlet API的一部分,它允许开发者在请求到达目标Servlet或JSP之前以及...
- **权限控制**:如上面示例所示,检查用户是否已登录,限制未授权访问。 - **字符编码转换**:统一处理请求和响应的编码问题。 - **日志记录**:记录请求信息,便于调试和分析。 - **缓存处理**:对静态资源进行...
在实际应用中,你可以根据用户角色分配不同的权限,然后在模板中使用Shiro标签进行控制。例如,只有管理员角色的用户才能看到“删除用户”按钮: ```html ('delete:user')}> ()">删除用户 ``` **注意事项** 1. ...
在本文中,我们将深入探讨Spring Security如何实现权限控制,并通过一个名为"springsecuritydemo4"的示例项目来理解其核心概念。 首先,Spring Security 的权限控制主要涉及以下几个关键组件: 1. **认证...
本项目主要关注的是如何使用过滤器(Filter)和拦截器(Interceptor)来实现登录页面的控制与跳转。以下是对这些知识点的详细说明: 1. **SpringBoot**: SpringBoot是Spring框架的一个子项目,旨在简化Spring应用...