জাভা বর্তমান মেশিনের নাম এবং ব্যবহারকারীর লগ ইন?


153

বর্তমানে লগ ইন করা ব্যবহারকারীর নাম (উইন্ডোজ / ইউনিক্স) এবং মেশিনের হোস্ট-নেম পাওয়া কি সম্ভব?

আমি ধরে নিলাম এটি কিছু স্থির পরিবেশ শ্রেণীর একটি সম্পত্তি।

আমি এটি ব্যবহারকারীর নামের জন্য খুঁজে পেয়েছি

com.sun.security.auth.module.NTSystem NTSystem = new
        com.sun.security.auth.module.NTSystem();
System.out.println(NTSystem.getName());

এবং এটি মেশিনের নামের জন্য:

import java.net.InetAddress;
...
String computerName;
...
try {
    computerName = InetAddress.getLocalHost().getHostName();
}

catch(Exception ex) {
    ...
}

প্রথমটি কি কেবল উইন্ডোজের জন্য?

এবং যদি আপনার কোনও হোস্টনাম সেট না থাকে তবে দ্বিতীয়টি কী করবে?


NTSystemশ্রেণী শুধুমাত্র বিদ্যমান WindowsJDK ডিস্ট্রিবিউশন
BullyWiiPlaza

উত্তর:


256

বর্তমানে লগ ইন করা ব্যবহারকারী পেতে:

System.getProperty("user.name"); //platform independent 

এবং মেশিনের হোস্টনাম:

java.net.InetAddress localMachine = java.net.InetAddress.getLocalHost();
System.out.println("Hostname of local machine: " + localMachine.getHostName());

1
কি System.getProperty("user.name"); উভয় উইন্ডোজ এবং লিনাক্স কাজ করে?
ক্যাটফিশ 20

5
তবে user.nameমানটি স্পোফ করা যায় , সুতরাং এটি প্রমাণীকরণের জন্য ব্যবহার করা উচিত নয়।
রায়েডওয়াল্ড

14
System.getProperty ("user.name") বর্তমানে ব্যবহারকারী লগইন করা হয়নি, এটি সুরক্ষা প্রসঙ্গে জেভিএম চলছে এর অধীনে ব্যবহারকারী।
rkosegi

1
যেমন ওপি "মেশিনের নাম" বা "কম্পিউটারের নাম" হিসাবে উল্লেখ করেছে এই উত্তরটি ভুল। জাভাতে "কম্পিউটারের নাম" পাওয়ার কোনও উপায় নেই, বুট প্রক্রিয়াতে কম্পিউটারের অর্পণ করা নামটি এবং নেটওয়ার্কের সাথে সম্পর্কিত নয়। সমস্ত ওএসের এই ধারণাটি রয়েছে তবে দুর্ভাগ্যক্রমে জাভাতে এই মানটি প্রকাশিত হয়নি। তবে প্রায়শই - তবে সর্বদা নয় - উপরের পদ্ধতিটি প্রকৃতপক্ষে কম্পিউটারের নামটি ফিরিয়ে দেবে। ব্যাখ্যার জন্য stackoverflow.com/a/40702767/1504556 দেখুন ।
পিটারহ

91

বর্তমানে লগ ইন করা ব্যবহারকারী পেতে:

System.getProperty("user.name");

যন্ত্রটির হোস্টের নাম পেতে:

InetAddress.getLocalHost().getHostName();

আপনার প্রশ্নের শেষ অংশটির উত্তর দিতে, জাভা এপিআই বলে যে getHostName () ফিরে আসবে

এই আইপি ঠিকানার হোস্টের নাম, বা যদি সুরক্ষা চেক দ্বারা অপারেশনটির অনুমতি না দেওয়া হয় তবে আইপি ঠিকানার পাঠ্য উপস্থাপনা।


সমস্ত ওপিএসের মূল প্রশ্নের উত্তর দেওয়ার জন্য উত্সাহ দিন একটি পরিষ্কার এবং সংক্ষেপে bar অবশ্যই এটি গ্রহণযোগ্য উত্তর হওয়া উচিত
অ্যান্ডি

1
@ অ্যান্ডির সাথে সম্মত হন - সমস্ত পয়েন্টের সুস্পষ্ট এবং সংক্ষিপ্ত উত্তরের জন্য আপ-ভোট দিন।
পল ইডেন

9

user.nameপরিবেশগত ভেরিয়েবলগুলি নকল হতে পারে ব্যবহার করা নিরাপদ নয়। আপনি যে পদ্ধতিটি ব্যবহার করছেন তা ভাল, ইউনিক্স ভিত্তিক ওএসের জন্যও একই ধরণের পদ্ধতি রয়েছে


সুতরাং এটি কি উইন্ডোজের জন্য? এটি করার কোনও প্ল্যাটফর্মের স্বাধীন উপায় নেই?
স্টুয়ার্ট আর জেফেরিস

7
সিস্টেমের বৈশিষ্ট্যগুলি পরিবেশ পরিবর্তনশীল নয়। পরিবেশের ভেরিয়েবলের জন্য System.getenv ("USER") ব্যবহার করুন। System.properties এখনও জাভা কমান্ডলাইনে ব্যবহারকারী দ্বারা java -Duser.name = অন্য কারও সাথে সুরক্ষিত করা যেতে পারে তাই নিরাপদ নয়
ড্যান কার্টার

"ইউনিক্স ভিত্তিক ওএসের জন্যও একই ধরণের পদ্ধতি রয়েছে": ধন্যবাদ, আমি কী খুঁজছিলাম। তাহলে এই ওএসের পদ্ধতি কী? আমার গবেষণা, বর্তমানে আমাকে পরিচালিত করেছে ... এখানে :) "হোয়ামি" ব্যবহার করছেন?
পিডেম

স্প্যামের জন্য দুঃখিত, আমি সি তে এক ধরণের সমাধান দিতে এখানে এসেছি: stackoverflow.com/questions/1451825/… সুতরাং মূলত, আমাদের সি কোড "getpwuid (getuid ())" সহ হোয়ামি বা জেএনআই ব্যবহার করতে হবে । আর কোনও ক্লাস ইউনিক্স সিস্টেম নেই।
পিডেম

0

ব্যবহারকারীর পথে বর্তমানে লগ ইন করার জন্য:

System.getProperty("user.home");
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.