2016-05-29 7 views
0

У меня есть Java-приложение на JBoss. Проблема заключается в том, что вы не перенаправлены на запрашиваемую страницу после перенаправления после таймаута сеанса. Пример:перенаправить на запрашиваемую страницу после входа в систему

  1. Вы на http://localhost:8082/myapp/#/admin/unr?tab=config
  2. Сессия просрочена -> брошена http://localhost:8082/myapp/login.jsp
  3. Put имя пользователя/пароль и введите
  4. перенаправлено в http://localhost:8082/myapp/index.html

Примечания:

  • Мой клиент Угловая основе, и я использую ANGULAR хеш ключа #
  • Мой web.xml:

    <web-app xmlns="http://java.sun.com/xml/ns/j2ee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" 
    version="2.4"> 
    
    <display-name>My Application</display-name> 
    
    
        <security-constraint> 
        <web-resource-collection> 
         <web-resource-name>CSS</web-resource-name> 
         <url-pattern>/styles/*</url-pattern> 
         <url-pattern>/fonts/*</url-pattern> 
         <url-pattern>/assets/images/*</url-pattern> 
        </web-resource-collection> 
        </security-constraint> 
    
        <security-constraint> 
        <web-resource-collection> 
        <web-resource-name>Protected Area</web-resource-name> 
        <description>These pages are only accessible by authorized administrators.</description> 
        <url-pattern>/*</url-pattern> 
        </web-resource-collection> 
        <auth-constraint> 
         <description>These are the roles who have access</description> 
         <role-name>*</role-name> 
        </auth-constraint> 
        </security-constraint> 
    
        <login-config> 
        <auth-method>FORM</auth-method> 
        <form-login-config> 
         <form-login-page>/login.jsp</form-login-page> 
         <form-error-page>/login.jsp?error=error</form-error-page> 
        </form-login-config> 
        </login-config> 
    
        <error-page> 
        <error-code>403</error-code> 
        <location>/login.jsp?unauthorized=unauthorized</location> 
        </error-page> 
    
    
        <welcome-file-list> 
        <welcome-file>index.html</welcome-file> 
        </welcome-file-list> 
    
    </web-app> 
    
  • Мой login.jsp имеет простую форму с j_security_check действием :

    <form id="loginForm" name="loginForm" method="post" action="/j_security_check"> 
        <fieldset> 
         <!-- Username input--> 
         <div class="form-group"> 
         <input id="usernameInput" name="j_username" type="text" placeholder="Username" class="form-control" required=""> 
         </div> 
    
         <!-- Password input--> 
         <div class="form-group"> 
         <input id="password" name="j_password" type="password" placeholder="Password" class="form-control" required=""> 
         </div> 
    
         <button class="btn btn-primary sign-in-btn" type="submit"> 
         Sign in 
         </button> 
        </fieldset> 
        </form> 
    

Я думаю, что это проблема сервера: должен быть способ заставить приложение вернуться к предыдущей странице, а не index.html. Правильно?

ответ

0

Сначала вы должны создать класс, который расширяет класс WebSecurityConfigurerAdapter Вот пример

@Configuration 
@EnableWebSecurity 
public class SecurityConfig extends WebSecurityConfigurerAdapter { 
    @Override 
    protected void configure(HttpSecurity http) throws Exception { 
    http.authorizeRequests().antMatchers("/", "/home").permitAll() 
      .and() 
      .addFilterAfter(new CsrfHeaderFilter(), CsrfFilter.class).formLogin().loginPage("/login") 
      .successHandler(new AuthenticationSuccessHandler() { 
       @Override 
       public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException { 
        //In this you can Redirect your desired view 
       } 
      }).failureUrl("/loginError"); 

}  
} 
+0

Я не использую весну. моя война основана на J2EE – MoneerOmar

+0

Но в вашем коде и объяснении вы не упомянули –

0

Решение:

j_security_check работал отлично. Проблема в том, что сервер не сохраняет эту часть после хешбанга (#) для перенаправления (# используется в Angularjs для маршрутизации). Когда таймауты сеанса, сервер отправляет меня на страницу входа, НО URL-адрес в адресной строке все еще указывает на запрошенную страницу. Так что я спас URL в LocalStorage, и в моей основной контроллер, который вызывается при успешном входе в систему, я проверил для этой переменной:

в login.jsp:

 if(window.localStorage) { 
     localStorage.setItem("redirectToUrl", window.location.hash); 
    } 

в угловых main.controller .js:

angular.module('myappp') 
.controller('MainViewCtrl', ['$scope', '$state', function($scope, $state) { 

    if (window.localStorage && localStorage.redirectToUrl) { 
    window.location = window.location.pathname + localStorage.redirectToUrl; 
    localStorage.removeItem("redirectToUrl"); 
    } else { 
    $state.go('app.instances.list'); 
} 
}]); 
Смежные вопросы