项目中有两个文件夹
admin文件夹
student文件夹
实现权限管理
项目用Struts2+hibernate完成
我想要实现的是 前台有个登陆页面 可以选择 管理员登录 还是学生登录
管理员登录后 执行管理员的验证,并且只能访问admin文件夹下的jsp页面
学生登录后执行学生的验证,只能访问学生的页面,访问其他也页面的话则提示没权限,或者错误,如果没有登录 直接访问文件的话 提示要登录,并且跳转到登陆页面。有的说用拦截器实现,有的说用过滤器实现,
有没个完整的例子呢?
网上找了些个例子 都不太适合
这个是我写的用于登陆的actionpackage com.yaxing.admin.action;import java.util.List;
import java.util.Map;
import com.opensymphony.xwork2.ActionContext;
import com.yaxing.domain.StudentInfo;
import com.yaxing.service.AdminServer;
import com.yaxing.service.AdminServerImpl;public class LoginAction {
private String userName;
private String userPassword;
private List<StudentInfo> listStudent;
private AdminServer adm = new AdminServerImpl();
private StudentInfo studentInfo;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserPassword() {
return userPassword;
}
public void setUserPassword(String userPassword) {
this.userPassword = userPassword;
}
public StudentInfo getStudentInfo() {
return studentInfo;
}
public void setStudentInfo(StudentInfo studentInfo) {
this.studentInfo = studentInfo;
}
@SuppressWarnings("unchecked")
public String studentLogin() throws Exception {
listStudent = adm.findByUser(getUserName(), getUserPassword());
if(listStudent.size()!=0){
Map session = ActionContext.getContext().getSession();
session.put("user",getUserName());
return "studentLogin";
}
else
return "input";
}
public String adminLogin() throws Exception {
return "adminLogin";
}
}这个是拦截器package com.yaxing.utils;import java.util.Map;import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;public class AuthInterceptor extends AbstractInterceptor {
@Override
@SuppressWarnings("unchecked")
public String intercept(ActionInvocation invocation) throws Exception {
Map session = invocation.getInvocationContext().getSession();// jsp登录页面将用户登录的信息存在一个session中
// 这里是用拦截器的方法取得这个session
// LoginAction log = (LoginAction) invocation.getAction();//
// 获得被拦截的Action的引用,获得Action的控制权限
// System.out.println("拦截器信息:启动拦截器,拦截Action时间:" + new Date());
String result = invocation.invoke();// 执行Action或者下一个拦截器
// System.out.println("拦截器信息:Action执行完毕时间:!" + new Date());
String username = (String) session.get("user"); if (session.get("user") == null) // 判断session中有没有用户登录的信息,没有就返回login
{
ActionContext ac = invocation.getInvocationContext();// 获取ActionContext对象
ac.put("popedom", "您还没有登录,请登录!");
System.out.println("未登录用户!");
return Action.LOGIN; } else {
System.out.println("登录成功!!");
// return invocation.invoke(); // 若有登录信息就继续执行其他拦截器的代码
return result;
}
}
}
这个的就只是实现了登陆,
依然可以通过文件名来访问 也就是说 登陆和没登陆是一样的。
admin文件夹
student文件夹
实现权限管理
项目用Struts2+hibernate完成
我想要实现的是 前台有个登陆页面 可以选择 管理员登录 还是学生登录
管理员登录后 执行管理员的验证,并且只能访问admin文件夹下的jsp页面
学生登录后执行学生的验证,只能访问学生的页面,访问其他也页面的话则提示没权限,或者错误,如果没有登录 直接访问文件的话 提示要登录,并且跳转到登陆页面。有的说用拦截器实现,有的说用过滤器实现,
有没个完整的例子呢?
网上找了些个例子 都不太适合
这个是我写的用于登陆的actionpackage com.yaxing.admin.action;import java.util.List;
import java.util.Map;
import com.opensymphony.xwork2.ActionContext;
import com.yaxing.domain.StudentInfo;
import com.yaxing.service.AdminServer;
import com.yaxing.service.AdminServerImpl;public class LoginAction {
private String userName;
private String userPassword;
private List<StudentInfo> listStudent;
private AdminServer adm = new AdminServerImpl();
private StudentInfo studentInfo;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserPassword() {
return userPassword;
}
public void setUserPassword(String userPassword) {
this.userPassword = userPassword;
}
public StudentInfo getStudentInfo() {
return studentInfo;
}
public void setStudentInfo(StudentInfo studentInfo) {
this.studentInfo = studentInfo;
}
@SuppressWarnings("unchecked")
public String studentLogin() throws Exception {
listStudent = adm.findByUser(getUserName(), getUserPassword());
if(listStudent.size()!=0){
Map session = ActionContext.getContext().getSession();
session.put("user",getUserName());
return "studentLogin";
}
else
return "input";
}
public String adminLogin() throws Exception {
return "adminLogin";
}
}这个是拦截器package com.yaxing.utils;import java.util.Map;import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;public class AuthInterceptor extends AbstractInterceptor {
@Override
@SuppressWarnings("unchecked")
public String intercept(ActionInvocation invocation) throws Exception {
Map session = invocation.getInvocationContext().getSession();// jsp登录页面将用户登录的信息存在一个session中
// 这里是用拦截器的方法取得这个session
// LoginAction log = (LoginAction) invocation.getAction();//
// 获得被拦截的Action的引用,获得Action的控制权限
// System.out.println("拦截器信息:启动拦截器,拦截Action时间:" + new Date());
String result = invocation.invoke();// 执行Action或者下一个拦截器
// System.out.println("拦截器信息:Action执行完毕时间:!" + new Date());
String username = (String) session.get("user"); if (session.get("user") == null) // 判断session中有没有用户登录的信息,没有就返回login
{
ActionContext ac = invocation.getInvocationContext();// 获取ActionContext对象
ac.put("popedom", "您还没有登录,请登录!");
System.out.println("未登录用户!");
return Action.LOGIN; } else {
System.out.println("登录成功!!");
// return invocation.invoke(); // 若有登录信息就继续执行其他拦截器的代码
return result;
}
}
}
这个的就只是实现了登陆,
依然可以通过文件名来访问 也就是说 登陆和没登陆是一样的。
解决方案 »
- 新手问个jsp+jdbc问题
- struts2.0中<s:property value="dm.name"/> 这样是从request还是session中取值?
- 通过yahoo api搜索,如何将得到的xml一行一行打印出来?
- JSP页面的访问记录
- 如何使quartz获取ServletContext信息
- 请问各位:怎样将页面数据导出成DBF文件格式? 谢谢!
- 重金求教!!!
- 打开网页,日期控件DTPicker不能正确显示
- jsp连接池的问题
- 为什么我在点jsp链接时(如:<a href="###/a.jsp">test</a>)时,会显示下载的对话框?
- 如何在js中添加节点时设置其属性
- 怎么解决用url传递中文参数的问题啊??
还有可以用security来实现
我下载了SpringSecurity 想快速的找个例子 在我这个项目中使用起来呢?
谢谢。
我登陆后的页面是一个framest 我把这个页面放在footer里引用的。
登陆后这个auth.jsp只能放在一个footer页面中页面而且要禁止 登陆后的所有页面的刷新功能,这样auth.jsp里面就产生一个int变量值1.
然后是这个auth.jsp里可以产生一个int的变量初始为零,保存这个值,在filter或interceptor里获取这个变量值。如果登陆成功后在filter或interceptor里让这个值就变成1,如果用户在用路径访问,在filter或interceptor判断这个值是否等于0,不等于回首页,等于也是首页
哈哈,搞定。
切记你的filter或interceptor必须拦截admin和student这个两个文件夹
if(){
获取int值判断
这里在对这个值经行加加运算,如果登陆成功后用户在用路径访问这个值就不等于1了
那么就让其回首页吧!
}else{
回首页
}
package com.anxin.utils;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.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import com.anxin.domain.User;public class LoginFilter implements Filter {
public void destroy() {
System.out.println("-=-=-=-=***登录检查过滤器已经关闭***-=-=-=-=-=!");
} public void doFilter(ServletRequest req, ServletResponse res,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest httpReq = (HttpServletRequest) req;
HttpServletResponse resp = ((HttpServletResponse) res);
resp.setHeader("Pragma", "No-cache");
resp.setHeader("Cache-Control", "no-cache");
resp.setHeader("Cache-Control", "no-store");
resp.setDateHeader("Expires", 0);
System.out.println("-=-=-=-=***企业过滤权限***-=-=-=-=-=!");
Object o = httpReq.getSession().getAttribute("user");
if (null != o&&(((User) o).getUserLevel() == 16)) {
System.out.println("userLevel="+((User) o).getUserLevel() );
}else httpReq.getRequestDispatcher("/index.jsp").forward(req, res);
chain.doFilter(req, res);
}
public void init(FilterConfig arg0) throws ServletException {
System.out.println("-=-=-=-=***登录检查过滤器已经启用***-=-=-=-=-=!");
}
}然后在web.xml配置一下 <filter> <!-- 定义核心Filter的名字 --> <filter-name>LoginFilter</filter-name> <!-- 定义核心Filter的实现类 --> <filter-class> filter.LoginFilter </filter-class> </filter> <filter-mapping> <filter-name>LoginFilter</filter-name> <url-pattern>*.jsp</url-pattern> </filter-mapping>
直接访问http://localhost:8080/StuMis/login.jsp 页面显示正常就是直接输入任意jsp页面后跳转到login.jsp页面 这个页面显示不正常。CSS JS 图片都没显示出来呢。~
咋解决啊~
web-inf 文件中放的都是些配置文件啊?
就是和我的项目集成的时候就是不成功
搞的好麻烦。
if(log.getUser()!=null){
ActionContext ac = invocation.getInvocationContext();// 获取ActionContext对象
ac.put("popedom", "您还没有登录,请登录!");
System.out.println("未登录用户!");
return Action.LOGIN; } else {
System.out.println("登录成功!!");
return invocation.invoke();
}
Spring Security3.1例子