三种思路。
1, 就想你说的用session 通过判断session中是否有对应的值来判断用户是否登陆。
最好做成一个自定义的标签。将你需要登陆的页面嵌入这个标签就可以了。
2,将需要权限才能登录的jsp文件放到WEN-INF目录下,通过转发跳转到该目录下的jsp文件进行访问
3, 通过过滤器来处理 . 将你需要登陆后才能访问的页面放到 一个目录下(非WEN-INF目录)。
然后 在过滤器中判断你的请求是否能够进入这个目录就可以了。
1.写一个FILTER,用来判断用户是否有权限进入指定页面。
java 代码
- private static Logger LOG = Logger.getLogger(FilterServlet.class);
- private String allowRole = null; //配置允许的角色
- private String redirectURl = null; //重定向的URL
- 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-mapping>
- <filter-name>UserAdmin </filter-name>
- <url-pattern>/jsp/security/* </url-pattern>
- </filter-mapping>
- 上面配置的意思是说,当用户进入/jsp/security文件夹下的页面的时候,程序会进入FilterServlet 里的doFilter方法里,进行权限判断
其他的页面权限控制:
1.你可以在filter里判断用户是否登录,然后需要特殊权限能访问的页面,在页面里进行判断。
2.推荐使用开源框架ACEGI来进行权限控制。