shiro的前端登录html页面,shiro问题-页面登录地址是login.html,她是如何进入到realm的?...

此类如下:

public class AuthenticationFilter extends FormAuthenticationFilter {

private static final Log log = Logs.get();

protected ShopDao shopDao;

protected ShopClerkDao shopClerkDao;

protected ShopClerkHandoverDao shopClerkHandoverDao;

protected SysLogService sysLogService;

@Override

protected boolean onLoginSuccess(AuthenticationToken token,

Subject subject,

ServletRequest request,

ServletResponse response)

throws Exception {

if (log.isDebugEnabled()) {

log.debugf("Login success.Will load store info for user id [%s]",

subject.getPrincipal());

}

ShopClerk clerk = shopClerkDao().fetch(Cnd.where(ShopClerk.USER_ID, "=", subject.getPrincipal()));

if (clerk != null) {

Session session = subject.getSession();

session.setAttribute(ShopClerk.CLERK_ID, clerk.getClerk_id());

session.setAttribute(ShopClerk.CLERK_NAME, clerk.getClerk_name());

session.setAttribute(ShopClerk.SHOP_ID, clerk.getShop_id());

session.setAttribute(ShopClerk.SHOP_NAME, clerk.getShop_name());

String ymd = getYMD();

Cnd cnd = Cnd.where(ShopClerkHandover.CREATE_TIME, ">", ymd+" 05:00:00");

cnd.desc(ShopClerkHandover.CREATE_TIME);

cnd.and(ShopClerkHandover.CLERK_ID, "=", clerk.getClerk_id());

cnd.and(ShopClerkHandover.SHOP_ID, "=", clerk.getShop_id());

ShopClerkHandover handover = shopClerkHandoverDao().fetch(cnd);

if (null == handover) {

ShopClerkHandover over = new ShopClerkHandover();

over.setOndate(BurroKit.current());

over.setClerk_id(clerk.getClerk_id());

over.setClerk_name(clerk.getClerk_name());

over.setShop_id(clerk.getShop_id());

over.setShop_name(clerk.getShop_name());

over.setCreate_time(BurroKit.current());

shopClerkHandoverDao().insert(over);

}

if (null != handover) {

if (handover.getOutdate() != null) {

ShopClerkHandover over = new ShopClerkHandover();

over.setOndate(BurroKit.current());

over.setClerk_id(clerk.getClerk_id());

over.setClerk_name(clerk.getClerk_name());

over.setShop_id(clerk.getShop_id());

over.setShop_name(clerk.getShop_name());

over.setCreate_time(BurroKit.current());

shopClerkHandoverDao().insert(over);

}

}

}

Shop shop = shopDao().fetch(Cnd.where(Shop.USER_ID, "=", subject.getPrincipal()));

if (shop != null) {

Session session = subject.getSession();

session.setAttribute(NutShiro.SessionKey, subject.getPrincipal());

session.setAttribute(Shop.SHOP_ID, shop.getShop_id());

session.setAttribute(Shop.SHOP_NAME, shop.getShop_name());

session.setAttribute(NutShiro.TokenKey, R.UU16());

}

SysLog syslog = SysLog.c("aop.after",

AevnService.MEMBER_LOG_TAG,

"me.zouooh.mvc.shiro.UserRealm#doGetAuthenticationInfo",

(int)subject.getPrincipal(),

"用户登录");

syslog.setLog_ip(BurroKit.getRemoteIp((HttpServletRequest)request));

sysLogService().async(syslog);

return super.onLoginSuccess(token, subject, request, response);

}

@Override

protected void setFailureAttribute(ServletRequest request, AuthenticationException ae) {

String message = ae.getMessage();

if (ae instanceof IncorrectCredentialsException) {

message = "密码错误";

}

request.setAttribute(getFailureKeyAttribute(), message);

}

public SysLogService sysLogService() {

if (sysLogService == null) {

sysLogService = Mvcs.ctx().getDefaultIoc().get(SysLogService.class);

}

return sysLogService;

}

public ShopDao shopDao() {

if (shopDao == null) {

shopDao = Mvcs.ctx().getDefaultIoc().get(ShopDao.class);

}

return shopDao;

}

public ShopClerkDao shopClerkDao() {

if (shopClerkDao == null) {

shopClerkDao = Mvcs.ctx().getDefaultIoc().get(ShopClerkDao.class);

}

return shopClerkDao;

}

public ShopClerkHandoverDao shopClerkHandoverDao(){

if (shopClerkHandoverDao == null) {

shopClerkHandoverDao = Mvcs.ctx().getDefaultIoc().get(ShopClerkHandoverDao.class);

}

return shopClerkHandoverDao;

}

public String getYMD() {

Calendar calendar = Times.C(Times.now());

String ymd = Times.sD(calendar.getTime());

return ymd;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是基于 Shiro 的 Ajax 登录的简单示例,包括.xml文件: 1. 创建一个login.html页面,包括一个表单和jQuery代码: ```html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Login</title> <script src="http://code.jquery.com/jquery-1.9.1.min.js"></script> </head> <body> <h2>Login</h2> <form id="loginForm"> <label for="username">Username:</label> <input type="text" id="username" name="username" required> <br> <label for="password">Password:</label> <input type="password" id="password" name="password" required> <br> <input type="submit" value="Login"> </form> <div id="message"></div> <script> $(document).ready(function() { $('#loginForm').submit(function(e) { e.preventDefault(); $.ajax({ type: 'POST', url: 'login', data: $(this).serialize(), success: function(data) { if (data.success) { window.location.href = 'index.html'; } else { $('#message').text(data.message); } } }); }); }); </script> </body> </html> ``` 2. 创建一个Controller类,处理登录请求,返回JSON数据: ```java @Controller public class LoginController { @RequestMapping(value = "/login", method = RequestMethod.POST) @ResponseBody public Map<String, Object> login(HttpServletRequest request, HttpServletResponse response) { Map<String, Object> result = new HashMap<>(); String username = request.getParameter("username"); String password = request.getParameter("password"); UsernamePasswordToken token = new UsernamePasswordToken(username, password); try { SecurityUtils.getSubject().login(token); result.put("success", true); } catch (UnknownAccountException e) { result.put("success", false); result.put("message", "Unknown account"); } catch (IncorrectCredentialsException e) { result.put("success", false); result.put("message", "Incorrect password"); } catch (LockedAccountException e) { result.put("success", false); result.put("message", "Account is locked"); } catch (AuthenticationException e) { result.put("success", false); result.put("message", "Authentication failed"); } return result; } } ``` 3. 配置Shiro的.xml文件,包括Shiro的过滤器和Realm: ```xml <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean"> <property name="securityManager" ref="securityManager"/> <property name="loginUrl" value="/login.html"/> <property name="successUrl" value="/index.html"/> <property name="unauthorizedUrl" value="/unauthorized.html"/> <property name="filterChainDefinitions"> <value> /login = anon /logout = logout /static/** = anon /** = authc </value> </property> </bean> <bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager"> <property name="realm" ref="myRealm"/> </bean> <bean id="myRealm" class="com.example.MyRealm"> <property name="credentialsMatcher" ref="hashedCredentialsMatcher"/> </bean> <bean id="hashedCredentialsMatcher" class="org.apache.shiro.authc.credential.HashedCredentialsMatcher"> <property name="hashAlgorithmName" value="SHA-256"/> <property name="hashIterations" value="1000"/> </bean> ``` 4. 创建一个Realm类,实现Shiro的认证和授权方法: ```java public class MyRealm extends AuthorizingRealm { @Autowired private UserService userService; @Override protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) { // TODO: 实现授权方法 } @Override protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException { UsernamePasswordToken userToken = (UsernamePasswordToken) token; String username = userToken.getUsername(); User user = userService.getUserByUsername(username); if (user == null) { throw new UnknownAccountException(); } return new SimpleAuthenticationInfo(user.getUsername(), user.getPassword(), getName()); } } ``` 以上是一个基于 Shiro 的 Ajax 登录的简单示例,可以参考实现自己的功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值