Как использовать Shiro без страницы входа для веб-приложения - PullRequest
0 голосов
/ 02 июля 2018

У меня есть веб-приложение, написанное на Struts2. И у него нет страницы входа. Страница входа - это раздел главной страницы. Я хочу использовать Широ для безопасности моего приложения.

Я не понимаю, как использовать Shiro без страницы входа. И я не понимаю, как передать имя пользователя Широ из Struts Action.

Пожалуйста, помогите мне. Спасибо.

Мое действие:

public class InternalLoginAction extends ActionSupport {

private String remoteUser;

public String execute() throws NamingException, SQLException {
    HttpServletRequest request = ServletActionContext.getRequest();
    remoteUser = request.getRemoteUser();
    if (remoteUser != null) {
        User user = new User();
        user.setId(user.calcIdTemp(remoteUser));
        user.setName(remoteUser);
        user.setCompanyId(LoginDao.getUserCompanyId(remoteUser.toUpperCase()));
        user.setExternal(false);
        user.saveSession();

        //I want to pass username to Shiro here.

    }
    return SUCCESS;
}

public String getRemoteUser() {
    return remoteUser;
}

public void setRemoteUser(String remoteUser) {
    this.remoteUser = remoteUser;
}

}

Извините, но я не могу показать всю страницу. Только это:

<div id="login-dialog" title="Authorization" class="hide">
  <form id="login-dialog-form" >
  <table>
    <tr>
      <td>Login:</td>
      <td>
        <input id="login-dialog-login" name="form.login" size="22" maxlength="22" class="text ui-widget-content ui-corner-all" data-parsley-required="true" autofocus>
      </td>
    </tr>
    <tr>
      <td>Password:</td>
      <td>
       <input id="login-dialog-pass" name="form.pw" type="password" size="22" maxlength="22" class="text ui-widget-content ui-corner-all" data-parsley-required="true" data-parsley-minlength="6" data-parsley-maxlength="20">
      </td>
    </tr>
  </table>
  <br><a href="#" onclick="wsp.internalLogin()">I am employee of XXX</a>          
  </form>
</div>  

Моя функция:

 internalLogin: function() {
$.ajax({
  url: '/xxx/public/internalLogin.do',
  type: 'POST',
  success: function(data) {
    location.reload(true);
  },
  error: function(request, textStatus, errorThrown) {
    wsp.alertMessage(request.responseText);
  }
});

1 Ответ

0 голосов
/ 05 июля 2018

Возможно, вы захотите обработать всю логику входа в систему, прежде чем приступить к своим действиям.

Широ работает из коробки с сервлет-фильтрами. Например, этот пример (который является просто парой JSP) на самом деле не обрабатывает логику входа в систему: https://github.com/apache/shiro/tree/master/samples/servlet-plugin

За исключением предоставления формы входа. Фильтр сервлетов Shiro перехватывает сообщение на странице входа (в данном случае /login.jsp) и обрабатывает все остальное автоматически.

...