Repository: incubator-atlas Updated Branches: refs/heads/master 5f248157b -> 7c73f0c4a
ATLAS-774 Better error handling from login.jsp (nixonrodrigues via shwethags) Project: http://git-wip-us.apache.org/repos/asf/incubator-atlas/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-atlas/commit/7c73f0c4 Tree: http://git-wip-us.apache.org/repos/asf/incubator-atlas/tree/7c73f0c4 Diff: http://git-wip-us.apache.org/repos/asf/incubator-atlas/diff/7c73f0c4 Branch: refs/heads/master Commit: 7c73f0c4a5d8cfff96987c915e749ba9dff5057d Parents: 5f24815 Author: Shwetha GS <[email protected]> Authored: Fri May 20 15:30:58 2016 +0530 Committer: Shwetha GS <[email protected]> Committed: Fri May 20 15:30:58 2016 +0530 ---------------------------------------------------------------------- release-log.txt | 1 + .../AtlasAuthenticationFailureHandler.java | 55 +++++++++++++ .../AtlasAuthenticationSuccessHandler.java | 52 +++++++++++++ webapp/src/main/resources/spring-security.xml | 14 +++- webapp/src/main/webapp/login.jsp | 82 +++++++------------- 5 files changed, 146 insertions(+), 58 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/7c73f0c4/release-log.txt ---------------------------------------------------------------------- diff --git a/release-log.txt b/release-log.txt index 4a9a34d..486b2c5 100644 --- a/release-log.txt +++ b/release-log.txt @@ -21,6 +21,7 @@ ATLAS-409 Atlas will not import avro tables with schema read from a file (dosset ATLAS-379 Create sqoop and falcon metadata addons (venkatnrangan,bvellanki,sowmyaramesh via shwethags) ALL CHANGES: +ATLAS-774 Better error handling from login.jsp (nixonrodrigues via shwethags) ATLAS-683 Refactor local type-system cache with cache provider interface (vmadugun via shwethags) ATLAS-802 New look UI to show Business Catalog functionalities (kevalbhatt18 via yhemanth) ATLAS-658 Improve Lineage with Backbone porting (kevalbhatt18 via yhemanth) http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/7c73f0c4/webapp/src/main/java/org/apache/atlas/web/security/AtlasAuthenticationFailureHandler.java ---------------------------------------------------------------------- diff --git a/webapp/src/main/java/org/apache/atlas/web/security/AtlasAuthenticationFailureHandler.java b/webapp/src/main/java/org/apache/atlas/web/security/AtlasAuthenticationFailureHandler.java new file mode 100644 index 0000000..4f946ed --- /dev/null +++ b/webapp/src/main/java/org/apache/atlas/web/security/AtlasAuthenticationFailureHandler.java @@ -0,0 +1,55 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.atlas.web.security; + +import org.apache.log4j.Logger; +import org.codehaus.jackson.map.ObjectMapper; +import org.json.simple.JSONObject; +import org.springframework.security.core.AuthenticationException; +import org.springframework.security.web.authentication.AuthenticationFailureHandler; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + + +public class AtlasAuthenticationFailureHandler implements AuthenticationFailureHandler { + + private static Logger LOG = Logger.getLogger(AtlasAuthenticationFailureHandler.class); + + @Override + public void onAuthenticationFailure(HttpServletRequest httpServletRequest, HttpServletResponse response, + AuthenticationException e) throws IOException, ServletException { + + + LOG.debug("Login Failure ", e); + + JSONObject json = new JSONObject(); + ObjectMapper mapper = new ObjectMapper(); + json.put("msgDesc", e.getMessage()); + + String jsonAsStr = mapper.writeValueAsString(json); + response.setContentType("application/json"); + response.setStatus(HttpServletResponse.SC_UNAUTHORIZED); + response.setCharacterEncoding("UTF-8"); + response.getWriter().write(jsonAsStr); + + } +} http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/7c73f0c4/webapp/src/main/java/org/apache/atlas/web/security/AtlasAuthenticationSuccessHandler.java ---------------------------------------------------------------------- diff --git a/webapp/src/main/java/org/apache/atlas/web/security/AtlasAuthenticationSuccessHandler.java b/webapp/src/main/java/org/apache/atlas/web/security/AtlasAuthenticationSuccessHandler.java new file mode 100644 index 0000000..8654716 --- /dev/null +++ b/webapp/src/main/java/org/apache/atlas/web/security/AtlasAuthenticationSuccessHandler.java @@ -0,0 +1,52 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.atlas.web.security; + +import org.apache.log4j.Logger; +import org.codehaus.jackson.map.ObjectMapper; +import org.json.simple.JSONObject; +import org.springframework.security.core.Authentication; +import org.springframework.security.web.authentication.AuthenticationSuccessHandler; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + + +public class AtlasAuthenticationSuccessHandler implements AuthenticationSuccessHandler { + + private static Logger LOG = Logger.getLogger(AuthenticationSuccessHandler.class); + @Override + public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, + Authentication authentication) throws IOException, ServletException { + + LOG.debug("Login Success " + authentication.getPrincipal()); + + JSONObject json = new JSONObject(); + ObjectMapper mapper = new ObjectMapper(); + json.put("msgDesc", "Success"); + + String jsonAsStr = mapper.writeValueAsString(json); + response.setContentType("application/json"); + response.setStatus(HttpServletResponse.SC_OK); + response.setCharacterEncoding("UTF-8"); + response.getWriter().write(jsonAsStr); + } +} http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/7c73f0c4/webapp/src/main/resources/spring-security.xml ---------------------------------------------------------------------- diff --git a/webapp/src/main/resources/spring-security.xml b/webapp/src/main/resources/spring-security.xml index 4590eef..bba054d 100644 --- a/webapp/src/main/resources/spring-security.xml +++ b/webapp/src/main/resources/spring-security.xml @@ -30,7 +30,9 @@ <security:http pattern="/login.jsp" security="none" /> <security:http pattern="/css/**" security="none" /> - <security:http pattern="/lib/**" security="none" /> + <security:http pattern="/libs/**" security="none" /> + <security:http pattern="/js/**" security="none" /> + <security:http pattern="/api/atlas/admin/status" security="none" /> <security:http disable-url-rewriting="true" use-expressions="true" create-session="always" @@ -41,8 +43,8 @@ <form-login login-page="/login.jsp" - default-target-url="/index.html" - authentication-failure-url="/login.jsp?error=true" + authentication-success-handler-ref="atlasAuthenticationSuccessHandler" + authentication-failure-handler-ref="atlasAuthenticationFailureHandler" username-parameter="j_username" password-parameter="j_password" /> @@ -52,6 +54,12 @@ <security:custom-filter position="LAST" ref="atlasAuthorizationFilter"/> </security:http> + <beans:bean id="atlasAuthenticationSuccessHandler" + class="org.apache.atlas.web.security.AtlasAuthenticationSuccessHandler" /> + + <beans:bean id="atlasAuthenticationFailureHandler" + class="org.apache.atlas.web.security.AtlasAuthenticationFailureHandler" /> + <beans:bean id="formAuthenticationEntryPoint" class="org.apache.atlas.web.filters.AtlasAuthenticationEntryPoint"> <beans:property name="loginFormUrl" value="/login.jsp" /> http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/7c73f0c4/webapp/src/main/webapp/login.jsp ---------------------------------------------------------------------- diff --git a/webapp/src/main/webapp/login.jsp b/webapp/src/main/webapp/login.jsp index 2990477..cf5990a 100644 --- a/webapp/src/main/webapp/login.jsp +++ b/webapp/src/main/webapp/login.jsp @@ -14,77 +14,49 @@ See the License for the specific language governing permissions and limitations under the License. --> -<%@ page import="org.apache.atlas.ApplicationProperties,org.apache.commons.configuration.Configuration" %> <!DOCTYPE html> -<html lang="en"> - <head> - <meta charset="utf-8"> - <title>Atlas Login</title> - <meta name="description" content="description"> - <meta name="keyword" content="keywords"> - <meta name="viewport" content="width=device-width, initial-scale=1"> - <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css"> - <link href="http://netdna.bootstrapcdn.com/font-awesome/4.2.0/css/font-awesome.css" rel="stylesheet"> - <link href='http://fonts.googleapis.com/css?family=Righteous' rel='stylesheet' type='text/css'> - <link href="/css/login.css" rel="stylesheet"> - <!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries --> - <!--[if lt IE 9]> - <script src="http://getbootstrap.com/docs-assets/js/html5shiv.js"></script> - <script src="http://getbootstrap.com/docs-assets/js/respond.min.js"></script> - <![endif]--> - - <script src="https://code.jquery.com/jquery-2.2.1.min.js" integrity="sha256-gvQgAFzTH6trSrAWoH1iPo9Xc96QxSZ3feW6kem+O00=" crossorigin="anonymous"></script> - - </head> -<body> -<div class="errorBox"> - <a href="javascript:void(0)" class="close" title="close"><i class="fa fa-times"></i></a> - <div class="alert alert-danger"> - <strong>Error!</strong> Invalid User credentials.<br> Please try again. - </div> -</div> +<!--[if lt IE 7]><html class="no-js lt-ie9 lt-ie8 lt-ie7"><![endif]--> +<!--[if IE 7]><html class="no-js lt-ie9 lt-ie8"><![endif]--> +<!--[if IE 8]><html class="no-js lt-ie9"><![endif]--> +<!--[if gt IE 8]><!--> +<html class="no-js"> + <!--<![endif]--> + <head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> + <title>Atlas Login</title> + <meta name="description" content=""> + <meta name="viewport" content="width=device-width"> + <link href="js/libs/bootstrap/css/bootstrap.min.css" media="all" rel="stylesheet" type="text/css" id="bootstrap-css"> + <link href="css/login.css" media="all" rel="stylesheet" type="text/css" > + <script src="js/libs/jquery/js/jquery.min.js" ></script> + <script src="js/modules/atlasLogin.js" ></script> + </head> + <body class="login" style=""> <div id="wrapper"> - <div class="container-fluid"> + <div class="container-fluid"> <div class="row"> <div class="col-sm-4 col-sm-offset-4"> - <form name='f' action='/j_spring_security_check' method='POST'> + <form action="" method="post" accept-charset="utf-8"> <div class="login-pane"> <h2 align="center">Apache <strong>Atlas</strong></h2> <div class="input-group"> <span class="input-group-addon"><i class="glyphicon glyphicon-user"></i></span> - <input type='text' class="form-control" name='j_username' placeholder="Username" required > + <input type="text" class="form-control" id="username" name="username" placeholder="Username" tabindex="1" required="" autofocus> </div> <div class="input-group"> <span class="input-group-addon"><i class="glyphicon glyphicon-lock"></i></span> - <input type='password' name='j_password' class="form-control" placeholder="Password" required > - + <input type="password" class="form-control" name="password" placeholder="Password" id="password" tabindex="2" autocomplete="off" required> </div> - <input class="btn-atlas btn-block" name="submit" type="submit" value="Login"/> - + <span id="errorBox" class="col-md-12 help-inline" style="color:#FF1A40;display:none;text-align:center;padding-bottom: 10px;"><span class="errorMsg"></span></span> + <input class="btn-atlas btn-block" name="submit" id="signIn" type="submit" value="Login"> </div> </form> </div> </div> - </div> + </div> </div> -<script type="text/javascript"> -$('body').ready(function(){ - var query = window.location.search.substring(1); - var statusArr = query.split('='); - var status = -1; - if(statusArr.length > 0){ - status = statusArr[1]; - } - if(status=="true"){ - $('.errorBox').show(); - } -}); -$('.close').click(function(){ - $('.errorBox').hide(); -}) -</script> - -</body> -</html> + </body> +</html> \ No newline at end of file
