- fantasy
- 等级:
- 性别:
- 文章: 598
- 积分: 1479
- 来自: 杭州
|
众所周知,如果没有对页面进行权限控制,用户只要输入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;
-
-
-
-
-
-
-
-
- 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;
-
-
-
-
- private String redirectURl = null;
-
- public void init(FilterConfig filterConfig) throws ServletException {
-
- 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来进行权限控制。
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
|
返回顶楼 |
|
|
- leeking
- 等级: 初级会员
- 文章: 82
- 积分: 40
- 来自: from sy to sh
|
难道你的 当前用户是固定的吗?你写成了 UserAction.CURRENT_USER这种形式.
|
返回顶楼 |
|
|
- 大老鼠上的小草原
- 等级: 初级会员
- 性别:
- 文章: 14
- 积分: 30
- 来自: 哈理工
|
fantasy 写道:
众所周知,如果没有对页面进行权限控制,用户只要输入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;
-
-
-
-
-
-
-
-
- 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;
-
-
-
-
- private String redirectURl = null;
-
- public void init(FilterConfig filterConfig) throws ServletException {
-
- 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来进行权限控制。
|
返回顶楼 |
|
|
- jomper
- 等级:
- 性别:
- 文章: 109
- 积分: 119
- 来自: 湖北-武汉
|
拦截器似乎更适合处理权限。
|
返回顶楼 |
|
|
- gs.liutong
- 等级: 初级会员
- 性别:
- 文章: 9
- 积分: 34
- 来自: 北京
|
有一些问题:
1.因为继承了HttpServlet和Servlet API紧耦合。
2.要注意request dispatcher的情况,Servlet 2.3 规范中的过滤器只能过滤 Web 客户机和其所访问的指定 Web 资源之间的内容。2.4 规范消除了这个限制,通过增强filter和request dispatcher的配合。
|
返回顶楼 |
|
|
- fantasy
- 等级:
- 性别:
- 文章: 598
- 积分: 1479
- 来自: 杭州
|
leeking 写道 难道你的 当前用户是固定的吗?你写成了 UserAction.CURRENT_USER这种形式.
UserAction.CURRENT_USER 这个是当前用户的键,根据这个找到当前用户的值。
|
返回顶楼 |
|
|
- fantasy
- 等级:
- 性别:
- 文章: 598
- 积分: 1479
- 来自: 杭州
|
jomper 写道
拦截器似乎更适合处理权限。
恩 很对。我们目前就是使用拦截器控制的权限!
|
返回顶楼 |
|
|
- haoyunlyh
- 等级: 初级会员
- 性别:
- 文章: 25
- 积分: 50
- 来自: 上海
|
如果权限做的复杂呢!这样的过滤器就不适用了吧
|
返回顶楼 |
|
|
- laiseeme
- 等级: 初级会员
- 性别:
- 文章: 3853
- 积分: 0
- 来自: 沈阳
|
我想知道你们说的拦截器是什么?
|
返回顶楼 |
|
|
- liu5201314
- 等级: 初级会员
- 文章: 9
- 积分: 30
- 来自: ...
|
spring MVC 里有个拦截器,蛮好用的.
|
返回顶楼 |
|
|