拦截器代码
public class LogInterceptor extends HandlerInterceptorAdapter {
private final static String DELETE_FLAG = "0";
private final static String SYSTEM= "CAS";
private final SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
/**
* 登录操作日志记录
* @param request
* @param response
* @param handler
* @param ex
*/
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex){
//判断是否为登录操作
if(request.getMethod().toLowerCase().equals("post")&&request.getRequestURI().toLowerCase().contains("login")){
CsUserLogin csUserLogin = new CsUserLogin();
getInfo(csUserLogin,request,response,ex);
saveLog(csUserLogin);
}
}
/**
* 填充用户登录日志内容
* @param csUserLogin
* @param request
* @param response
*/
public void getInfo(CsUserLogin csUserLogin,HttpServletRequest request, HttpServletResponse response,Exception ex){
csUserLogin.setId(UUID.randomUUID().toString().replaceAll("-",""));
//登录名
String loginName = (request.getParameterMap().get("username")[0]);
csUserLogin.setLoginName(loginName);
//系统和浏览器信息
String userAgent = request.getHeader("user-agent");
String os = getOS(userAgent);
csUserLogin.setOperatingSystem(os);
csUserLogin.setBrowser(userAgent);
//登录时间
csUserLogin.setLoginTime(new Date());
//登录路径和方法
csUserLogin.setMethod(request.getMethod());
csUserLogin.setRequestUri(request.getRequestURI());
//ip
csUserLogin.setIpAddress(getRemoteAddr(request));
//异常信息
if(ex!=null){
csUserLogin.setErrorInfo(ex.getMessage());
}
//册除状态 1删除,0未删除:默认"0"
csUserLogin.setDelFlag(DELETE_FLAG);
}
/**
* 存储登录日志
* @param csUserLogin
*/
public void saveLog(CsUserLogin csUserLogin){
DataSource dataSource = ApplicationContextProvider
.getApplicationContext().getBean("dataSource",
DataSource.class);
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
StringBuffer sb = new StringBuffer("");
System.out.println(sb.toString());
jdbcTemplate.update(sb.toString());
}
/**
* 获得用户远程地址
*/
public static String getRemoteAddr(HttpServletRequest request){
String remoteAddr = request.getHeader("X-Real-IP");
if (!StringUtils.isEmpty(remoteAddr)) {
remoteAddr = request.getHeader("X-Forwarded-For");
}else if (!StringUtils.isEmpty(remoteAddr)) {
remoteAddr = request.getHeader("Proxy-Client-IP");
}else if (!StringUtils.isEmpty(remoteAddr)) {
remoteAddr = request.getHeader("WL-Proxy-Client-IP");
}
return remoteAddr != null ? remoteAddr : request.getRemoteAddr();
}
/**
* 获取参数
* @param params
* @return
*/
public static String getParams(Map<String, String[]> params){
Map map = params;
Set keSet=map.entrySet();
StringBuffer sb = new StringBuffer();
for(Iterator itr = keSet.iterator(); itr.hasNext();){
Map.Entry me=(Map.Entry)itr.next();
Object ok=me.getKey();
Object ov=me.getValue();
String[] value=new String[1];
if(ov instanceof String[]){
value=(String[])ov;
}else{
value[0]=ov.toString();
}
for(int k=0;k<value.length;k++){
if(k==0){
sb.append("&").append(ok+"="+value[k]);
}else{
sb.append(","+value[k]);
}
//System.out.println(ok+"="+value[k]);
}
}
if(sb.length()==0){
return null;
}else{
return sb.deleteCharAt(0).toString();
}
}
private String getOS(String userAgent){
String os = new String();
//=================OS Info=======================
if (userAgent.toLowerCase().contains("windows") )
{
os = "Windows";
} else if(userAgent.toLowerCase().contains("mac"))
{
os = "Mac";
} else if(userAgent.toLowerCase().contains("x11"))
{
os = "Unix";
} else if(userAgent.toLowerCase().contains("android"))
{
os = "Android";
} else if(userAgent.toLowerCase().contains("iphone"))
{
os = "IPhone";
}else{
os = "UnKnown, More-Info: "+userAgent;
}
return os;
}
}
拦截器配置
<!-- 拦截器配置,拦截顺序:先执行后定义的,排在第一位的最后执行。 -->
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/login" />
<bean class="org.jasig.cas.web.interceptor.LogInterceptor" />
</mvc:interceptor>
</mvc:interceptors>
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。