1111import javax .servlet .http .Cookie ;
1212import javax .servlet .http .HttpServletRequest ;
1313import javax .servlet .http .HttpServletResponse ;
14+
15+ import cn .com .ttblog .ssmbootstrap_table .model .User ;
1416import org .apache .commons .codec .binary .Base64 ;
17+ import org .apache .commons .lang3 .StringUtils ;
1518import org .slf4j .Logger ;
1619import org .slf4j .LoggerFactory ;
1720import org .springframework .beans .factory .annotation .Autowired ;
1821import com .github .jscookie .javacookie .Cookies ;
19- import cn .com .ttblog .ssmbootstrap_table .Constant .ConfigConstant ;
22+ import cn .com .ttblog .ssmbootstrap_table .constant .ConfigConstant ;
2023import cn .com .ttblog .ssmbootstrap_table .service .IUserService ;
2124import cn .com .ttblog .ssmbootstrap_table .util .AntPathMatcherUtil ;
2225
@@ -25,7 +28,7 @@ public class LoginFilter implements Filter {
2528 private FilterConfig filterConfig ;
2629 @ Autowired
2730 private IUserService userService ;
28-
31+
2932 private static final Logger LOG =LoggerFactory .getLogger (LoginFilter .class );
3033 @ Override
3134 public void init (FilterConfig filterConfig ) throws ServletException {
@@ -34,110 +37,107 @@ public void init(FilterConfig filterConfig) throws ServletException {
3437
3538 @ Override
3639 public void doFilter (ServletRequest servletRequest ,
37- ServletResponse servletResponse , FilterChain filterChain )
40+ ServletResponse servletResponse , FilterChain filterChain )
3841 throws IOException , ServletException {
3942 HttpServletRequest httpServletRequest = (HttpServletRequest ) servletRequest ;
4043 HttpServletResponse httpServletResponse = (HttpServletResponse ) servletResponse ;
41- String noFilterTagString = filterConfig
42- .getInitParameter ("noFilterTags" ).trim ();
44+ String noFilterTagString = filterConfig .getInitParameter ("noFilterTags" ).trim ();
4345 boolean enable =Boolean .parseBoolean (filterConfig .getInitParameter ("enable" ));
4446 //不起用的情况下直接通过
4547 if (!enable ){
46- filterChain .doFilter (httpServletRequest ,
47- httpServletResponse );
48+ filterChain .doFilter (httpServletRequest ,httpServletResponse );
4849 return ;
4950 }
50-
5151 String [] noFilterTags = noFilterTagString .split ("\n " );
5252 int length =noFilterTags .length ;
5353 for (int i =0 ;i <length ;i ++){
5454 noFilterTags [i ]=noFilterTags [i ].trim ();
5555 }
56- LOG . debug ( "放行路径:{}-{},访问路径:{}" , Arrays . toString ( noFilterTags ), noFilterTags . length , httpServletRequest .getRequestURI () );
57- if ( AntPathMatcherUtil . isMatch ( noFilterTags , httpServletRequest . getRequestURI ())){
58- filterChain . doFilter ( httpServletRequest ,
59- httpServletResponse );
56+ String uri = httpServletRequest .getRequestURI ();
57+ LOG . debug ( "访问路径:{},放行路径:{}-{}" , uri , noFilterTags . length , Arrays . toString ( noFilterTags ));
58+ if ( AntPathMatcherUtil . isMatch ( noFilterTags , uri )){
59+ filterChain . doFilter ( httpServletRequest , httpServletResponse );
6060 LOG .debug ("非拦截uri" );
6161 return ;
6262 }
63- String uri = httpServletRequest .getRequestURI ();
64- LOG .debug ("过滤路径:{}" ,uri );
65- // 配置文件中允许放行的关键字
66- if (noFilterTags != null ) {
67- for (String noFilterTag : noFilterTags ) {
68- if (noFilterTag == null || "" .equals (noFilterTag .trim ())) {
69- continue ;
70- }
71- if (uri .indexOf (noFilterTag .trim ()) != -1 ) {
72- LOG .debug ("uri:" +uri );
73- filterChain .doFilter (httpServletRequest ,
74- httpServletResponse );
75- return ;
76- }
77- }
78- }
79-
80- Cookie [] cookies =httpServletRequest .getCookies ();
81- Cookies cs =Cookies .initFromServlet (httpServletRequest , httpServletResponse );
82- LOG .debug ("path:" +uri );
83- LOG .debug ("cookies:" +cs .get ().toString ());
63+ Cookies cookies =Cookies .initFromServlet (httpServletRequest , httpServletResponse );
64+ LOG .debug ("cookies:{}" ,cookies .get ().toString ());
8465 Object islogin =httpServletRequest .getSession ().getAttribute (ConfigConstant .ISLOGIN );
8566 if ( islogin != null &&Boolean .parseBoolean (islogin .toString ())) {
86- LOG .debug ("p1" );
87- if (uri .endsWith (ConfigConstant .PROJECTNAME +"/" )){
88- httpServletResponse .sendRedirect (httpServletRequest
89- .getContextPath () + "/manage.html" );
90- }else {
91- filterChain .doFilter (httpServletRequest , httpServletResponse );
67+ //从session检查登录状态
68+ checkStatusFromSession (httpServletRequest ,httpServletResponse ,filterChain );
69+ return ;
70+ } else if (cookies !=null &&cookies .get ().size ()>0 ){
71+ //从cookie检查登录状态
72+ checkStatusFromCookie (httpServletRequest ,httpServletResponse ,filterChain );
73+ return ;
74+ }else {
75+ LOG .debug ("^^^no cookie,no session" );
76+ if (!httpServletResponse .isCommitted ()){
77+ redirect (httpServletRequest ,httpServletResponse );
78+ return ;
79+ }else {
80+ LOG .info ("no cookie&session httpServletResponse.isCommitted():{}" ,httpServletResponse .isCommitted ());
9281 }
93- } else if (cookies !=null ){
94- LOG .debug ("p2" );
95- boolean find =false ;
96- for (Cookie cookie :cookies ){
97- if (cookie .getName ().equals (ConfigConstant .USERNAME )&&cookie .getValue ().length ()>0 ){
98- find =true ;
99- LOG .warn ("查询用户:{}" ,userService .getUserByName (cookie .getValue ()));
100- httpServletRequest .getSession ().setAttribute (ConfigConstant .ISLOGIN , true );
101- httpServletRequest .getSession ().setAttribute (ConfigConstant .USERNAME , cookie .getValue ());
102- if (uri .endsWith (ConfigConstant .PROJECTNAME +"/" )){
103- httpServletResponse .sendRedirect (httpServletRequest
104- .getContextPath () + "/manage.html" );
105- }else {
106- filterChain .doFilter (httpServletRequest , httpServletResponse );
107- }
82+ }
83+ }
84+
85+ private void checkStatusFromSession (HttpServletRequest httpServletRequest ,HttpServletResponse httpServletResponse ,FilterChain filterChain ) throws IOException , ServletException {
86+ LOG .debug ("get login status from session" );
87+ String uri = httpServletRequest .getRequestURI ();
88+ if (uri .endsWith (ConfigConstant .PROJECTNAME +"/" )){
89+ httpServletResponse .sendRedirect (httpServletRequest .getContextPath () + "/manage.html" );
90+ }else {
91+ filterChain .doFilter (httpServletRequest , httpServletResponse );
92+ }
93+ }
94+
95+ private void checkStatusFromCookie (HttpServletRequest httpServletRequest ,HttpServletResponse httpServletResponse ,FilterChain filterChain ) throws IOException , ServletException {
96+ LOG .debug ("get login status from cookie" );
97+ String uri = httpServletRequest .getRequestURI ();
98+ Cookie [] cookiesArray =httpServletRequest .getCookies ();
99+ boolean find =false ;
100+ for (Cookie cookie :cookiesArray ){
101+ if (cookie .getName ().equals (ConfigConstant .USERNAME )&&cookie .getValue ().length ()>0 ){
102+ User user =userService .getUserByName (cookie .getValue ());
103+ LOG .warn ("根据cookie:{}查询用户:{}" ,cookie ,user );
104+ if (user ==null ){
105+ break ;
108106 }
109- }
110- if (!find ){
111- //关于committed状态 http://blog.csdn.net/jubincn/article/details/8920573
112- if (!httpServletResponse .isCommitted ()){
113- //记录之前访问的参数
114- String requrib =httpServletRequest .getRequestURI ()+"?" +httpServletRequest .getQueryString ();
115- String requri =Base64 .encodeBase64String (requrib .getBytes ());
116- httpServletResponse .sendRedirect (httpServletRequest
117- .getContextPath () + "/index.html?requri=" +requri );
107+ find =true ;
108+ httpServletRequest .getSession ().setAttribute (ConfigConstant .ISLOGIN , true );
109+ httpServletRequest .getSession ().setAttribute (ConfigConstant .USERNAME , cookie .getValue ());
110+ if (uri .endsWith (ConfigConstant .PROJECTNAME +"/" )){
111+ httpServletResponse .sendRedirect (httpServletRequest .getContextPath () + "/manage.html" );
112+ }else {
113+ break ;
118114 }
119- return ;
120115 }
121- }else {
122- LOG .debug ("^^^no cookie,no session" );
123- // if(uri.endsWith(ConfigConstant.PROJECTNAME+"/")){
124- // httpServletResponse.sendRedirect(httpServletRequest
125- // .getContextPath() + "/index.html");
126- // }
116+ }
117+ if (!find ){
118+ //关于committed状态 http://blog.csdn.net/jubincn/article/details/8920573
127119 if (!httpServletResponse .isCommitted ()){
128- //记录之前访问的参数
129- String requrib =httpServletRequest .getRequestURI ()+"?" +httpServletRequest .getQueryString ();
130- String requri =Base64 .encodeBase64String (requrib .getBytes ());
131- httpServletResponse .sendRedirect (httpServletRequest
132- .getContextPath () + "/index.html?requri=" +requri );
120+ redirect (httpServletRequest ,httpServletResponse );
121+ }else {
122+ LOG .info ("no cookie httpServletResponse.isCommitted():{}" ,httpServletResponse .isCommitted ());
133123 }
134- return ;
124+ }else {
125+ filterChain .doFilter (httpServletRequest ,httpServletResponse );
126+ }
127+ }
128+
129+ private void redirect (HttpServletRequest httpServletRequest ,HttpServletResponse httpServletResponse ) throws IOException {
130+ //记录之前访问的参数
131+ String uri = httpServletRequest .getRequestURI ();
132+ if (StringUtils .isNotBlank (httpServletRequest .getQueryString ())){
133+ uri +="?=" +httpServletRequest .getQueryString ();
135134 }
136-
135+ String base64uri =Base64 .encodeBase64String (uri .getBytes ());
136+ httpServletResponse .sendRedirect (httpServletRequest .getContextPath () + "/index.html?requri=" +base64uri );
137137 }
138138
139139 @ Override
140140 public void destroy () {
141- LOG .debug ("destory" );
141+ LOG .debug ("loginfilter destory" );
142142 }
143143}
0 commit comments