Java 如何在WEB应用程序中使用无登录页面的Shiro
我有一个用Struts2编写的WEB应用程序。而且它没有登录页面。登录页面是主页的一个div。 我想使用Shiro来保护我的应用程序 没有登录页面,我不知道如何使用Shiro。 我不明白如何从Struts Action向Shiro传递用户名 请帮帮我。 多谢各位 我的行动:Java 如何在WEB应用程序中使用无登录页面的Shiro,java,struts2,shiro,Java,Struts2,Shiro,我有一个用Struts2编写的WEB应用程序。而且它没有登录页面。登录页面是主页的一个div。 我想使用Shiro来保护我的应用程序 没有登录页面,我不知道如何使用Shiro。 我不明白如何从Struts Action向Shiro传递用户名 请帮帮我。 多谢各位 我的行动: public class InternalLoginAction extends ActionSupport { private String remoteUser; public String execute() th
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>
您可能希望在开始操作之前处理所有登录逻辑 Shiro使用Servlet过滤器进行开箱即用。例如,这个示例(只是一对JSP)实际上并不处理任何登录逻辑:
而不是呈现登录表单。Shiro Servlet过滤器截取登录页面的帖子(在本例中为
/login.jsp
),并自动处理所有其他内容。您的登录表单/操作是什么样子?@Brian Demers补充道,谢谢您的回答。当我只有div而没有页面时,我真的不明白如何使用shiro.loginUrl=/login.jsp。我想按原样使用Shiro,但我想将用户名传递给Shiro,因为我不想修改我的应用程序。呈现登录div的页面URL是什么?我有全部功能。请看我的第一条信息。若我只使用链接,应用程序将无法运行。我真的不想为Shiro更改我的应用程序。我不想变得过于密集,但你应该能够使用/xxx/public/internalLogin.do
作为你的登录页面。您的操作可能只是返回SUCCESS
,(并为远程用户返回SecurityUtils.getSubject()
)。或者,您可以基于该主题构建自己的bean。如果您想自己调用实际的.login()
,请查看:
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);
}
});