Hibernate Spring Struts2 它们的拦截器
Hibernate拦截
@Component("entityInterceptor")
public class EntityInterceptor extends EmptyInterceptor {
private static final long serialVersionUID = 7319416231145791577L;
// 保存回调方法 保存时更新时间
@Override
public boolean onSave(Object entity, Serializable id, Object[] state, String[] propertyNames, Type[] types) {
if (entity instanceof BaseEntity) {
for (int i = 0; i < propertyNames.length; i++) {
if (BaseEntity.CREATE_DATE_PROPERTY_NAME.equals(propertyNames[i]) || BaseEntity.MODIFY_DATE_PROPERTY_NAME.equals(propertyNames[i])) {
state[i] = new Date();
}
}
ReflectionUtil.invokeSetterMethod(entity, BaseEntity.CREATE_DATE_PROPERTY_NAME, new Date()); //反射调用
}
return true;
}
/**
* 调用Setter方法
*
* @param object
* 对象
*
* @param propertyName
* 属性名称
*
* @param propertyValue
* 属性值
*/
public static void invokeSetterMethod(Object object, String propertyName, Object propertyValue) {
Class<?> setterMethodClass = propertyValue.getClass();
invokeSetterMethod(object, propertyName, propertyValue, setterMethodClass);
}
/**
* 调用Setter方法
*
* @param object
* 对象
*
* @param propertyName
* 属性名称
*
* @param propertyValue
* 属性值
*
* @param setterMethodClass
* 参数类型
*/
public static void invokeSetterMethod(Object object, String propertyName, Object propertyValue, Class<?> setterMethodClass) {
String setterMethodName = "set" + StringUtils.capitalize(propertyName);
try {
Method setterMethod = object.getClass().getMethod(setterMethodName, setterMethodClass);
setterMethod.invoke(object, propertyValue);
} catch (Exception e) {
e.printStackTrace();
}
}
Sturs2拦截
public class LogInterceptor extends AbstractInterceptor {
private static final long serialVersionUID = 276741467699160227L;
@Resource(name = "logServiceImpl")
private LogService logService;
@Resource(name = "adminServiceImpl")
private AdminService adminService;
@Override
public String intercept(ActionInvocation invocation) throws Exception {
String result = invocation.invoke();
Object action = invocation.getAction();
String actionClass = action.getClass().getName();
String actionMethod = invocation.getProxy().getMethod();
if (action instanceof BaseAdminAction) {
if (!StringUtils.equals(result, BaseAdminAction.ERROR)) {
List<LogConfig> allLogConfigList = LogConfigUtil.getAllLogConfigList();
if (allLogConfigList != null) {
for (LogConfig logConfig : allLogConfigList) {
if (StringUtils.equals(logConfig.getActionClass(), actionClass) && StringUtils.equals(logConfig.getActionMethod(), actionMethod)) {
BaseAdminAction baseAdminAction = (BaseAdminAction) action;
HttpServletRequest request= ServletActionContext.getRequest();
String logInfo = baseAdminAction.getLogInfo();
String operator = adminService.getLoginAdmin().getUsername();
if(operator == null) {
operator = "未知";
}
String ip = request.getRemoteAddr();
String operation = logConfig.getOperation();
Log log = new Log();
log.setOperation(operation);
log.setOperator(operator);
log.setActionClass(actionClass);
log.setActionMethod(actionMethod);
log.setIp(ip);
log.setInfo(logInfo);
logService.save(log);
break;
}
}
}
}
}
return null;
}
或者
public class MemberVerifyInterceptor extends MethodFilterInterceptor {
private static final long serialVersionUID = -86246303854807787L;
@Override
public String doIntercept(ActionInvocation actionInvocation) throws Exception {
String loginMemberId = (String) actionInvocation.getInvocationContext().getSession().get(Member.MEMBER_ID_SESSION_NAME);
if (loginMemberId == null) {
HttpServletRequest request = ServletActionContext.getRequest();
String loginRedirectUrl = request.getServletPath();
String queryString = request.getQueryString();
if (StringUtils.isNotEmpty(queryString)) {
loginRedirectUrl += "?" + queryString;
}
OgnlValueStack ognlValueStack = (OgnlValueStack)request.getAttribute("struts.valueStack");
ognlValueStack.set("loginRedirectUrl", loginRedirectUrl);
return "login";
}
return actionInvocation.invoke();
}
Spring拦截
@Component("adminSecurityListener")
public class AdminSecurityListener implements ApplicationListener {
@Resource(name = "adminServiceImpl")
private AdminService adminService;
public void onApplicationEvent(ApplicationEvent applicationEvent) {
// 登录成功:记录登录IP、清除登录失败次数
if (applicationEvent instanceof AuthenticationSuccessEvent) {
AuthenticationSuccessEvent authenticationSuccessEvent = (AuthenticationSuccessEvent) applicationEvent;
Authentication authentication = (Authentication) authenticationSuccessEvent.getSource();
String loginIp = ((WebAuthenticationDetails)authentication.getDetails()).getRemoteAddress();
Admin admin = (Admin) authentication.getPrincipal();
admin.setLoginIp(loginIp);
admin.setLoginDate(new Date());
Setting setting = SettingUtil.getSetting();
if (setting.getIsLoginFailureLock() == false) {
return;
}
admin.setLoginFailureCount(0);
adminService.update(admin);
}
// 登录失败:增加登录失败次数
if (applicationEvent instanceof AuthenticationFailureBadCredentialsEvent) {
AuthenticationFailureBadCredentialsEvent authenticationFailureBadCredentialsEvent = (AuthenticationFailureBadCredentialsEvent) applicationEvent;
Authentication authentication = (Authentication) authenticationFailureBadCredentialsEvent.getSource();
String loginUsername = authentication.getName();
Setting setting = SettingUtil.getSetting();
if (setting.getIsLoginFailureLock() == false) {
return;
}
Admin admin = adminService.getAdminByUsername(loginUsername);
if (admin != null) {
int loginFailureCount = admin.getLoginFailureCount() + 1;
if (loginFailureCount >= setting.getLoginFailureLockCount()) {
admin.setIsAccountLocked(true);
admin.setLockedDate(new Date());
}
admin.setLoginFailureCount(loginFailureCount);
adminService.update(admin);
}
}
}
}
上述只是框架中的一小部分功能,总结它们的特点是:
struts2 适合会员是否登录、请求参数等处理 多与前台打交道
spring 需要操作数据库,并且不用返回给用户消息,逻辑处理情景下用
hibernate 操作实体类(表)时的场景用,其与spring拦截相似,hibernate还有给表自动命名的策略
浙公网安备 33010602011771号