2016-10-14 8 views
2

私は、ユーザーがセッション "session.setAttribute"に古典的にログインするspring mvc Webアプリケーションを持っています。ユーザーデータにログインする必要があるときはいつでも、私はこのデータを使用します。Spring MVC WebリクエストとAndroidの同じリクエストへのリクエスト

Androidアプリを追加したいと思いますが、それぞれのアンドロイドリクエストに対して追加のメソッドを追加して、その中にユーザーデータを送信する必要がありますか? または同じ方法をリクエストすることはありませんか。

この種のクラウドアプリケーションのコンセプトは何ですか?アンドロイドのリクエストにはさまざまな方法を記述する必要がありますか?アンドロイドリクエストを受信すると、session.getAttributeは実行できないため、nullを返します。

User user = userService.getByUserNameAndPassword(userName, password); 
    if (user != null) { 

     if (user.isActive()) { 
       Account account = new Account(user, request.getRemoteAddr()); 
       HttpSession httpSession = request.getSession(true); 
       AccountRegistry.add(httpSession); 
       httpSession.setAttribute(Constant.ACCOUNT, account); 
       result.put(Constant.REF, Constant.SUCCESS); 

     } 

パブリッククラスアカウント{

private UserRightsHandler userRightsService = null; 
private User user; 
private String ipAddress; 
private boolean admin; 

public Account(User user, String ipAddress) { 
    this.user = user; 
    this.ipAddress = ipAddress; 
    userRightsService = new UserRightsHandler(user); 
    setAdmin(userRightsService.isAdmin()); 
} 

public UserRightsHandler getUserRightsService() { 
    return userRightsService; 
} 

public User getUser() { 
    return this.user; 
} 

public String getIpAddress() { 
    return ipAddress; 
} 

public boolean isAdmin() { 
    return admin; 
} 

private void setAdmin(boolean admin) { 
    this.admin = admin; 
} 

}

パブリッククラスAccountRegistry {

private static final Map<String, HttpSession> sessions = new HashMap<String, HttpSession>(); 

public static void add(HttpSession session) { 
    sessions.put(session.getId(), session); 
} 

public static void remove(HttpSession session) { 
    if (session != null) { 
     sessions.remove(session.getId()); 
     session.setAttribute(Constant.ACCOUNT, null); 
     session.invalidate(); 
    } 
} 

public static HttpSession getByHttpSessionID(String httpSessionID) { 
    Set<String> keys = sessions.keySet(); 
    Iterator it = keys.iterator(); 
    while (it.hasNext()) { 
     String sID = (String) it.next(); 
     HttpSession session = sessions.get(sID); 
     if (sID.equals(httpSessionID)) { 
      return session; 
     } 
    } 
    return null; 
} 

public static void removeByHttpSessionID(String httpSessionID) { 
    HttpSession session = getByHttpSessionID(httpSessionID); 
    remove(session); 
} 

public static Account getCurrentAccount() { 
    HttpServletRequest request = ContextFilter.getCurrentInstance().getRequest(); 
    HttpSession session = request.getSession(); 
    return (Account) session.getAttribute(Constant.ACCOUNT); 
} 

}

@RequestMapping(値= "/ changeStatus" 方法= Req uestMethod.POST) 公共@ResponseBody 文字列changeStatus(HttpServletRequestのリクエスト、HttpServletResponseの応答)にUnsupportedEncodingExceptionをスロー{

 User editor = AccountRegistry.getCurrentAccount().getUser(); 


    } 
+0

@あなたはコードを書いてください –

+0

あなたのコードで質問を編集する –

答えて

1

あなたは/ appLoginのようなカスタム認証要求を経由してAndroidアプリの開始時に自分のユーザー名とパスワードを送信するユーザーに確認することができますそれが正しいクレジットであれば、ユーザーに(アプリケーションへの)キーを返すことができ、アプリの実行中に変数に格納することができます。次に、ユーザーが何かしたいことがサーバーに要求を送ると、/ appExampleServiceのようなマッピングを持つ関数に送ることができます。この関数とこのデバイスで有効なデバイスを確認することができます。これは、mapping/exampleServiceを持つWebブラウザで使用されます。例えば;

@JsonSerialize 
@RequestMapping("/appExampleService") 
public int someServiceForAppClient(
     @RequestParam(value = "key", required = true) String apikey, 
     @RequestParam(value = "param", required = true) String someParam{ 
    String name=userDAO.getUsernameFromApiKey(apikey); 
    return someService(someParam, name); 
} 

@JsonSerialize 
@RequestMapping("/exampleService") 
public int someServiceForWebClient(
     @RequestParam(value = "param", required = true) String someParam) { 
    Authentication auth = SecurityContextHolder.getContext().getAuthentication(); 
    String name = auth.getName(); 
    return someService(someParam, name); 
} 

public int someService(String someParam,String name){ 

    return doBusiness(someParam, name); 
} 

userDAOは、与えられたキーを持つユーザの情報を取得するために私が作成しただけのものです。そして、彼はユーザー名とパスを送信するアプリケーションを起動したときにそのキーを返すアプリケーションのログインのためのサービスがあります

+0

したがって、アンドロイドreq。とWebクライアントとアンドロイドアプリのためのsession.get/setメソッドを使用する方法はありません。それは私のために悲しい – devrim

関連する問題