struts登录案例和自定义拦截器
2014-07-24 00:00
441 查看
struts登录案例:
struts.xml
<struts>
<constant name="struts.devMode" value="true" />
<constant name="struts.custom.i18n.resources" value="messages"></constant>
<package name="basic" extends="struts-default" namespace="/">
<interceptors>
<interceptor name="privilege" class="cn.itcast.interceptor.PrivilegeInterceptor"></interceptor>
</interceptors>
<global-results>
<result name="login">/login.jsp</result>
</global-results>
<action name="book_*" class="cn.itcast.action.BookAction" method="{1}">
<interceptor-ref name="privilege"></interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
</action>
</package>
<package name="login" extends="struts-default" namespace="/">
<action name="login" class="cn.itcast.action.LoginAction">
<result name="input">/login.jsp</result>
<result>/index.jsp</result>
</action>
</package>
</struts>
messages.properties(国际话信息):
username.required=用户名不能为空
username.length=用户名不能小于三个字符
password.required=密码不能为空
loginfail=用户名或者密码错误
action:
LoginAction:
public class LoginAction extends ActionSupport implements ModelDriven<User> {
private User user=new User();
@Override
public User getModel() {
return user;
}
@Override
public String execute() throws Exception {
QueryRunner qr=new QueryRunner(DBCPUtil.getDataSource());
String sql="select * from user where username=? and password=?";
User loginUser=qr.query(sql, new BeanHandler<User>(User.class),user.getUsername(),user.getPassword());
if(loginUser==null){
this.addActionError(this.getText("loginfail"));
return INPUT;
}else{
ServletActionContext.getRequest().getSession().setAttribute("loginUser", loginUser);
return SUCCESS;
}
}
}
LoginAction-validation.xml:
<!DOCTYPE validators PUBLIC
"-//Apache Struts//XWork Validator 1.0.3//EN"
"http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">
<validators>
<field name="username">
<field-validator type="requiredstring">
<message key="username.required"></message>
</field-validator>
<field-validator type="stringlength">
<param name="minLength">3</param>
<message key="username.length"></message>
</field-validator>
</field>
<field name="password">
<field-validator type="requiredstring">
<message key="password.required"></message>
</field-validator>
</field>
</validators>
jsp:
login.jsp:
<s:fielderror />
<s:actionerror/>
<form action="${pageContext.request.contextPath}/login.action" method="post">
用户名:<input type="text" name="username"/>
密码:<input type="password" name="password"/>
<input type="submit" value="登录">
</form>
</body>
自定义拦截器
拦截器 的使用 ,源自Spring AOP(面向切面编程)思想
拦截器 采用 责任链 模式
* 在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。
* 责任链每一个节点,都可以继续调用下一个节点,也可以阻止流程继续执行
在struts2 中可以定义很多个拦截器,将多个拦截器按照特定顺序 组成拦截器栈 (顺序调用 栈中的每一个拦截器 )
1、 struts2 所有拦截器 都必须实现 Interceptor 接口
2、 AbstractInterceptor 类实现了 Interceptor 接口. 并为 init, destroy 提供了一个空白的实现
所有实际开发中,自定义拦截器 只需要 继承 AbstractInterceptor类, 提供 intercept 方法实现
3、 常用struts2 拦截器
<interceptor-ref name="modelDriven"/> 模型驱动
<interceptor-ref name="fileUpload"/> 文件上传
<interceptor-ref name="params"> 参数解析封装
<interceptor-ref name="conversionError"/> 类型转换错误
<interceptor-ref name="validation"> 请求参数校验
<interceptor-ref name="workflow"> 拦截跳转 input 视图
案例 : 登陆,对其它Action访问 通过自定义拦截器 进行权限控制
导入jar包 (struts2 jar、c3p0、 dbutils、 mysql驱动)
web.xml
struts.xml
JDBCUtils 工具类
第一步 : 编写index.jsp 提供 图书增删改查 四个功能
编写BookAction ,提供四个业务方法
第二步: 完成登陆功能
第三步 :必须要登陆 才能进行图书管理
使用Filter 进行权限控制 ---- 过滤所有web请求 (所有web资源访问)
使用拦截器 进行权限控制 ---- 主要拦截对Action访问 (不能拦截JSP)
定义拦截器 继承AbstractInterceptor
配置拦截器
方式一
<!-- 注册拦截器 -->
<interceptors>
<interceptor name="privilege" class="cn.itcast.interceptor.PrivilegeInterceptor"></interceptor>
</interceptors>
<action name="book_*" class="cn.itcast.action.BookAction" method="{1}" >
<!-- 使用拦截器 -->
<!-- 当使用自定义拦截器 后,默认拦截器 就会失效 -->
<interceptor-ref name="defaultStack"></interceptor-ref>
<interceptor-ref name="privilege"></interceptor-ref>
</action>
方式二
<!-- 注册拦截器 -->
<interceptors>
<interceptor name="privilege" class="cn.itcast.interceptor.PrivilegeInterceptor"></interceptor>
<!-- 自定义拦截器栈 -->
<interceptor-stack name="privilegeStack">
<interceptor-ref name="defaultStack"></interceptor-ref>
<interceptor-ref name="privilege"></interceptor-ref>
</interceptor-stack>
</interceptors>
<!-- 设置当前包 所有Action 都使用 自定义拦截器栈 -->
<default-interceptor-ref name="privilegeStack"></default-interceptor-ref>
struts.xml
<struts>
<constant name="struts.devMode" value="true" />
<constant name="struts.custom.i18n.resources" value="messages"></constant>
<package name="basic" extends="struts-default" namespace="/">
<interceptors>
<interceptor name="privilege" class="cn.itcast.interceptor.PrivilegeInterceptor"></interceptor>
</interceptors>
<global-results>
<result name="login">/login.jsp</result>
</global-results>
<action name="book_*" class="cn.itcast.action.BookAction" method="{1}">
<interceptor-ref name="privilege"></interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
</action>
</package>
<package name="login" extends="struts-default" namespace="/">
<action name="login" class="cn.itcast.action.LoginAction">
<result name="input">/login.jsp</result>
<result>/index.jsp</result>
</action>
</package>
</struts>
messages.properties(国际话信息):
username.required=用户名不能为空
username.length=用户名不能小于三个字符
password.required=密码不能为空
loginfail=用户名或者密码错误
action:
LoginAction:
public class LoginAction extends ActionSupport implements ModelDriven<User> {
private User user=new User();
@Override
public User getModel() {
return user;
}
@Override
public String execute() throws Exception {
QueryRunner qr=new QueryRunner(DBCPUtil.getDataSource());
String sql="select * from user where username=? and password=?";
User loginUser=qr.query(sql, new BeanHandler<User>(User.class),user.getUsername(),user.getPassword());
if(loginUser==null){
this.addActionError(this.getText("loginfail"));
return INPUT;
}else{
ServletActionContext.getRequest().getSession().setAttribute("loginUser", loginUser);
return SUCCESS;
}
}
}
LoginAction-validation.xml:
<!DOCTYPE validators PUBLIC
"-//Apache Struts//XWork Validator 1.0.3//EN"
"http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">
<validators>
<field name="username">
<field-validator type="requiredstring">
<message key="username.required"></message>
</field-validator>
<field-validator type="stringlength">
<param name="minLength">3</param>
<message key="username.length"></message>
</field-validator>
</field>
<field name="password">
<field-validator type="requiredstring">
<message key="password.required"></message>
</field-validator>
</field>
</validators>
jsp:
login.jsp:
<s:fielderror />
<s:actionerror/>
<form action="${pageContext.request.contextPath}/login.action" method="post">
用户名:<input type="text" name="username"/>
密码:<input type="password" name="password"/>
<input type="submit" value="登录">
</form>
</body>
自定义拦截器
拦截器 的使用 ,源自Spring AOP(面向切面编程)思想
拦截器 采用 责任链 模式
* 在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。
* 责任链每一个节点,都可以继续调用下一个节点,也可以阻止流程继续执行
在struts2 中可以定义很多个拦截器,将多个拦截器按照特定顺序 组成拦截器栈 (顺序调用 栈中的每一个拦截器 )
1、 struts2 所有拦截器 都必须实现 Interceptor 接口
2、 AbstractInterceptor 类实现了 Interceptor 接口. 并为 init, destroy 提供了一个空白的实现
所有实际开发中,自定义拦截器 只需要 继承 AbstractInterceptor类, 提供 intercept 方法实现
3、 常用struts2 拦截器
<interceptor-ref name="modelDriven"/> 模型驱动
<interceptor-ref name="fileUpload"/> 文件上传
<interceptor-ref name="params"> 参数解析封装
<interceptor-ref name="conversionError"/> 类型转换错误
<interceptor-ref name="validation"> 请求参数校验
<interceptor-ref name="workflow"> 拦截跳转 input 视图
案例 : 登陆,对其它Action访问 通过自定义拦截器 进行权限控制
导入jar包 (struts2 jar、c3p0、 dbutils、 mysql驱动)
web.xml
struts.xml
JDBCUtils 工具类
第一步 : 编写index.jsp 提供 图书增删改查 四个功能
编写BookAction ,提供四个业务方法
第二步: 完成登陆功能
第三步 :必须要登陆 才能进行图书管理
使用Filter 进行权限控制 ---- 过滤所有web请求 (所有web资源访问)
使用拦截器 进行权限控制 ---- 主要拦截对Action访问 (不能拦截JSP)
定义拦截器 继承AbstractInterceptor
配置拦截器
方式一
<!-- 注册拦截器 -->
<interceptors>
<interceptor name="privilege" class="cn.itcast.interceptor.PrivilegeInterceptor"></interceptor>
</interceptors>
<action name="book_*" class="cn.itcast.action.BookAction" method="{1}" >
<!-- 使用拦截器 -->
<!-- 当使用自定义拦截器 后,默认拦截器 就会失效 -->
<interceptor-ref name="defaultStack"></interceptor-ref>
<interceptor-ref name="privilege"></interceptor-ref>
</action>
方式二
<!-- 注册拦截器 -->
<interceptors>
<interceptor name="privilege" class="cn.itcast.interceptor.PrivilegeInterceptor"></interceptor>
<!-- 自定义拦截器栈 -->
<interceptor-stack name="privilegeStack">
<interceptor-ref name="defaultStack"></interceptor-ref>
<interceptor-ref name="privilege"></interceptor-ref>
</interceptor-stack>
</interceptors>
<!-- 设置当前包 所有Action 都使用 自定义拦截器栈 -->
<default-interceptor-ref name="privilegeStack"></default-interceptor-ref>
相关文章推荐
- Struts2自定义拦截器案例:验证用户是否登录拦截器
- JavaWeb -- Struts 自定义拦截器, 登录权限拦截
- JavaWeb -- Struts 自定义拦截器, 登录权限拦截
- struts2.X心得9--struts2自定义拦截器以及文件上传等几个拦截器使用案例
- struts2.X心得9--struts2自定义拦截器以及文件上传等几个拦截器使用案例
- 用struts拦截器实现登录验证功能AuthorizationInterceptor
- Struts第九天---自定义拦截器功能
- struts自定义拦截器的编写
- Struts 拦截器权限控制【通过拦截器实现登录后跳转到登录前页面】
- 基于struts拦截器的登录验证
- 在struts中使用拦截器(Interceptor)控制登录和权限
- 自定义拦截器用于用户登录的
- struts如何自定义一个拦截器?
- struts中的拦截器验证登录
- struts 登录拦截器的使用
- Struts 拦截器权限控制【通过拦截器实现登录后跳转到登录前页面】
- struts中用拦截器实现登录验证功能AuthorizationInterceptor
- Struts 拦截器权限控制【通过拦截器实现登录后跳转到登录前页面】
- day26_struts2.3登录案例
- Struts2通过自定义拦截器实现登录之后跳转到原页面